1. 手書きで絵を描いて説明します。
2. JavaScript がシングルスレッドである理由 (これは教師 Ruan Yifeng からの引用です)
JavaScript の単一スレッドはその目的に関連しています。
ブラウザのスクリプト言語としての JavaScript の主な目的は、ユーザーと対話し、DOM を操作することです。
これにより、シングルスレッドのみが可能であることが決定されます。そうでない場合は、非常に複雑な同期の問題が発生します。
たとえば、JavaScript に同時に 2 つのスレッドがあるとします。1 つのスレッドが特定の DOM ノードにコンテンツを追加し、もう 1 つのスレッドがそのノードを削除するとします。この場合、ブラウザはどちらのスレッドを使用する必要がありますか?
複雑さを避けるために、JavaScript は誕生以来シングルスレッドであり、これがこの言語の中心的な機能となっており、今後も変更されることはありません。
マルチコア CPU の計算能力を活用するために、HTML5 は Web Worker 標準を提案しています。これにより、JavaScript スクリプトは複数のスレッドを作成できますが、子スレッドはメインスレッドによって完全に制御され、子スレッドを操作してはなりません。ドム。
つまり、この新しい標準は JavaScript のシングルスレッドの性質を変えるものではありません。
ポータル: JavaScript 動作メカニズムのイベント ループの詳細な説明
3. JavaScript の非同期の性質はどこにありますか
冒頭の図のように、左側のメインスレッドが同期、左側のイベントキュー(メッセージキュー)が非同期だと個人的には考えています。
もちろん、JavaScript には多くの非同期があります:
Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理类似) setTimeout/setInterval CSS3 Transition/Animation postMessage Web Workers Web Sockets and more…