JavaScript単スレッド及びsetTimeOut非同期のアプリケーション

1064 ワード

一、js同期と非同期
JavaScriptでは任務は二つあります.一つは同期タスクで、一つは非同期タスクです.
同期タスク:各タスクはドキュメントの定義された順序で「実行スタック」に押し込まれ、現在のタスクの実行が完了したら、次のタスクが実行されます.
非同期タスク:各タスクを「タスクキュー」に押し込むと、現在の同期タスクのすべてが実行済みであれば、キューの中のタスクを「チーム外」で実行することができます.(注:ここでの非同期タスクは、必ずしもドキュメントの定義された順序でキューに入れるとは限らない)
タスクキュー(event loop):イベントを保存するためのキューとして理解できます.非同期タスクを実行すると、タスクを実行するためのコールバック関数に相当します.
JavaScriptエンジンはシングルスレッドで実行されています.ブラウザはいつでもJavaScriptプログラムを実行しているスレッドが一つしかありません.
二、setTimeOutアプリケーション
まずコードを見て理解してください.
console.log("1");

setTimeout(function(){
	console.log("2");
},1000);

console.log("3");

setTimeout(function(){
	console.log("4");
},0);
出力結果:1->3->4->2.
分析:
1.2つのconsolie.log()は同期しており、文書の順序に従ってそれらを実行スタックに押し込む.
2.スタックの同期タスクの実行が完了しました.
3.2つの非同期タスク(タイマー)を、第2のパラメータ(遅延実行時間)順に「タスクキュー」に押し込みます.
4.非同期タスクを実行します.
まとめ:
    jsはシングルスレッドで、setTimeOutは非同期です.ブラウザの中で、非同期操作はすべて「events loop」という行列に参加されています.ブラウザがいつこの列の中のコードを実行するかを理解すれば、その奥の妙が分かります.ブラウザは、すべての同期コードの実行が完了したら、ループを使ってこのコードを実行します.