menu HaloBlog close

非同期処理タスクキューとコールスタック

このコードはどのように実行されているか説明位していく

まず、グローバルコンテキストが実行されることで、clickイベント(task2)が実行される
その後にグローバルコンテキスト内で関数aが実行されて、関数a内のsetTimeout(task2)が実行されたことにより4s待機することになる。

4s秒待機している間にクリックイベントを発火すると、タスクキューにtask2が入り、4s後にtask2がタスクキューに入る

そして、コールスタックは5秒経った後に関数aの実行を終了し、関数aの実行が終了するとグローバルコンテキストも実行が終了する(first in first out)

次にイベントループがタスクキューにコールスタックが空いていることを知らせて、タスクキューに格納された最初のtask2がコールスタックに移動する

そしてtask2の実行が完了したらtask1がコールスタックに移動する

(メインスレッドが占有されている状態とはコールスタックが空になっていない状態を指す。)

補足 コールスタックにコンテキストが積まれている状態では、タスクキューに入っているタスクは待ちの状態になっているので、コンテキストが処理されるまではタスクキューののtaskがコールスタックに移動することはない

このような処理でタスクが実行されていき、タスクキューに入った順番で非同期が処理される