返回列表 發帖

同步與非同步的差異

什麼是同步(synchronous)??什麼是非同步(asynchronous)??同步與非同步的差在哪裡??

在看文章時常常都會看到一推像是什麼 "同步載入","非同步技術"之類的字眼,可能有些人其實不太了解同步跟非同步的差別,甚至會有些誤解,話說,"同步"這字眼真的很容易讓人以為他是在"同時處理"什麼之類的東西

同步與非同步在很多領域都有這字眼,其實我也沒有追究他到底原始代表著什麼意義。我這裡大概說說這兩個字眼在程式語言的籌範內代表的意義是什麼。所謂的同步其實不是"同時在處理"的意思,而是有點像是一步一步來的意思。像是我有三個指令ABC。同步的執行就是A執行完再執行B然後在執行C。非同步的意思就是跟同步相反,她不被順序所限制。所以三條指令ABC,並不會等A執行完才執行B。

我們以同步載入來說,假設今天要載入a.js與b.js:
<script src="a.js"></script>
<script src="b.js"></script>
所謂的同步載入就是會等a.js載入完成後,再繼續開始b.js的載入。而非同步載入,或是有人稱之為異步載入則不同,當a.js開始載入時,會繼續執行下面的指令,然後開始b.js的載入。所以說其實非同步反而比較有"同時在處理"的意思。

再來看看Javascript最令人津津樂道的技術AJAX(Asynchronous JavaScript and XML),非同步的JavaScript與XML技術,很明顯它是個非同步技術。會特別提出來是因為有些初學者會誤以為他是同步的,是按照程式碼順序一步一步執行下來的,然後debug底到死。

其實Ajax執行的方式就是丟出一推資料給伺服器,然後等伺服器回應後再執行某段程式碼。在等回應的這段時間是可以幹一些其他事的。當然,Ajax是非同步技術,但他也可以變成同步,不過這意味著在等伺服器回應這段時間,你是啥都不能幹的,那就代表,網頁呆住了......哈哈,有時候其實還是可以這樣幹的。

PS:其實在邏輯電路裡面有所謂的同步與非同步的電路,我猜這可能會比較接近它原始的意義,為啥會明明不同時執行卻叫他同步,很幸運的是我學過邏輯電路,很不幸的是我忘記了。我只能祈禱我沒完全記錯,應該真的有這東西吧,淡定 ˊ_>ˋ。

參考網頁:同步與非同步的差異

返回列表 回復 發帖