I. プロセスとスレッド
- プロセスは、CPUリソース割り当ての最小単位です。
- スレッドはCPUスケジューリングの最小単位です。
まじめな話、準備なしで高度な用語はとても言えませんo(╥﹏╥)o。
一般的に理解されている言葉は、工場としてのcpu、?パワーとして、工場は常に実行されている、?限られた、唯一のワークショップを使用するワークショップを与えることができ、工場の電源が実行されているワークショップには、プロセスを開くことに相当します。ブラウザは、新しいタブのページを開くと、それはタスクマネージャを介して表示することができます新しいプロセスを作成します。
ワーカーは、ワークショップを実行するために必要な、ワーカーは、複数のスレッドを持つことができますに相当する、ワークショップのスペースは、ワーカーによって共有され、各スレッドは、共有メモリを使用することができますが、異なるサイズの部屋内のスペースは、人々のさまざまな数を収容するために、部屋は他の人がいっぱいです入ってきたい唯一の誰かが出て行くのを待つことができ、いくつかの部屋は、例えば、使用する人を収容することができますバスルームは、トラップされた人々が他の人が入ってくるのを防ぐためにドアをロックします、人々の到着後にのみトイレで使用することができます。後から来た人はドアの前に並び、鍵が開くのを待ってから入ることができます。これは「相互排他ロック」と呼ばれ、複数のスレッドが同時に特定のメモリ領域を読み書きできないようにします。
ブラウザ
ブラウザはhtmlを解析してdomツリーを構築し、cssを解析してレンダリングツリーを構築し、それを画面に描画します。
JSの解析はブラウザのJS解析エンジンによって行われます。JSはシングルスレッド処理で、同じ時間には1つのことしかできず、すべてのタスクは順番にキューに入れられる必要があります。あるタスクに時間がかかりすぎると、他のタスクは待つしかありません。そのため、タスクの後ろのキューで最初に実行できるメカニズムが必要です:同期タスクと非同期タスク
III.メインスレッド、タスクキュー、イベントループ
JSの実行機構は、メインスレッドに加えて、タスクキュー、実行スタックを形成するタスクを実行するメインスレッド上の同期タスクとして見ることができ、非同期タスクは、タスクキュータスクに配置されます。メインスレッドの外には、"タスクキュー "もあります。非同期タスクが結果を持つとすぐに、イベントが「タスク・キュー」に置かれます。実行スタック」の同期タスクがすべて実行されると、システムは「タスク・キュー」を実行スタックに読み込んで実行を開始します。メイン・スレッドはループでタスク・キューからイベントを読み続けます。
マクロミッションとマイクロタスク
タスクキューは、マクロタスク、マイクロタスク、現在のタスクキューの実行が完了すると、メインスレッドの実行に次のタスクキューをループされるの実行に優先順位を与えるお読みください。
console.log(1)
setTimeout(()=>{
console.log(2)
},0)
console.log(3)
new Promise((resolve,reject) => {
console.log(4);
resolve(5)
console.log(6)
})
V. 区別
setTimeout(fn, 0)は実際にはすぐに実行されず、実行前に少なくとも4ms待機します。 つまり、マイクロタスクの概念がなく、非同期関数を実行するためにまだマクロタスクのメカニズムを使用している場合、さらに悪化し、ループ全体がタスクによってブロックされます。マイクロタスクはこのシナリオに対応するように設計されています。 マイクロタスクとマクロタスクの最大の違いは、マイクロタスクの実行中に新しいタスクがタスクキューに追加された場合、ブラウザはそのタスクが消費されるまで消費し、次のループに移ります。これがマイクロタスクとマクロタスクのタイミングに違いがある理由です。