非閉塞式の非同期I/O Node.jsには閉塞型ではないI/Oメカニズムが採用されているので、ファイルにアクセスするコードを実行した後、Nodejsはブロックされずにファイルの取得が完了するのを待つのではなく、このことを下のオペレーティングシステムに任せ、異歩のIOをコールバック関数で処理し、他のコードを実行に切り替え、事件ポーリング Nodejsが受信したイベントは、直ちに実行するのではなく、イベントキューに入れられます.NodeJSの現在のコードが実行されたら、彼はイベントキューにイベントがあるかどうかを確認します.もしあれば、彼は取り出して順次実行します..
シングルスレッド Node.jsは、各クライアント接続のために新しいスレッドを作成するのではなく、スレッドだけを使用しています.ユーザーが接続されると、内部イベントがトリガされ、非ブロッキングI/O、イベント駆動機構により、Node.jsプログラムをマクロ的にもパラレルにする.
利点:デッドロックしない、マルチスレッドのように同期問題を気にしない、スレッド切り替えによる性能上のオーバーヘッド欠点:マルチコアCPUは単独でサブスレッドを開く必要があり、エラーはアプリケーション全体を終了させ、大量の計算はCPUを占有し、非同期I/O を呼び出すことができない.
I/O密集型が得意です.は、主に、Nodeがイベントポーリングを利用してイベントを処理するのではなく、単にスレッドを開いて、各要求サービスを提供するのである.
CPU密集型の業務は苦手です.は、Nodeシングルスレッドのため、長時間の計算が実行されると、CPUが解放されなくなり、後続のI/Oが開始できなくなる.(解決策は、大規模演算を分解して複数の小さいタスクにし、I/Oの開始をブロックしないこと)globalオブジェクト
ブラウザ側と違って、ブラウザ側は全体の訪問を望む対象をwindowにかけます.nodejsは全体の訪問を希望する対象をglobalオブジェクトに掛けます.
Common JS Buffer、process、consone timerタイマー関連setImmedite()、set Timeout(fn,0)とprocess.nextTick()
両方は、同期イベントが実行された後、すぐに実行されるコールバック関数に導入されます.
実行順序は次の通りです.
process.nextTick()は、コールバック関数を現在の実行スタックの末尾に追加し、ジョブキューの前に setTimeout(fn,0)コールバック関数がタスクキューの最後に追加されます.0であっても、また4 msの遅延があります. setImmedite()は、タスクキューの最後尾にコールバック関数を挿入し、ブロッキングを引き起こすことはないが、他の非同期イベントを妨げることはない.
setImmediate(() => {
console.log('setImmediate');
})
setTimeout(() => {
console.log('setImmediate');
}, 0)
process.nextTick(() => {
console.log('next');
})