1. 程式人生 > >js中的同步非同步理解

js中的同步非同步理解

程序可以看做兩個佇列 一個是主執行緒佇列 另一個是任務佇列 只有執行完所有的主執行緒佇列後才會執行任務佇列

於是,所有任務可以分成兩種,一種是同步任務(synchronous),另一種是非同步任務(asynchronous)。同步任務指的是,在主執行緒上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;非同步任務指的是,不進入主執行緒、而進入"任務佇列"(task queue)的任務,只有等主執行緒任務執行完畢,"任務佇列"開始通知主執行緒,請求執行任務,該任務才會進入主執行緒執行。

具體來說,非同步執行機制如下:

(1)所有同步任務都在主執行緒上執行,形成一個執行棧(execution context stack)。
(2)主執行緒之外,還存在一個"任務佇列"(task queue)。只要非同步任務有了執行結果,就在"任務佇列"之中放置一個事件。
(3)一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務佇列",看看裡面有哪些事件。那些對應的非同步任務,於是結束等待狀態,進入執行棧,開始執行。
(4)主執行緒不斷重複上面的第三步。

同步請求需等待對方響應之後才繼續執行下一個請求 非同步請求不需要等待對方響應 所以我們往往只用非同步請求而不使用同步請求。