この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - フロントエンド面接質問
46. Browser とNode.jsにおいてのEvent Loopを説明してください。
まず、Event Loopとは、WebブラウザやNode.jsなどでJavaScriptが非同期処理を行う際に利用される仕組みです。
Browserにおいて、Event Loopは主に以下の手順で動作します。
- Web APIで非同期処理が開始される
- キューにコールバックを登録する
- ブラウザがメインスレッドを執行し、スタック上のタスクを処理する
- スタックが空になったら、キューからコールバックをデキューし、スタックにプッシュする
- 3,4を繰り返す
Node.jsのEvent Loopはブラウザよりも複雑で、以下の手順で動作します。
- Event Loopは、libuvがアプリケーションのシングルスレッドで開始される
- Timer Queue、I/O Callback Queue、Immediate Queue、Close Callback Queue、Idle Callback Queueの5つのキューに、それぞれに対応したコールバックがタイムスタンプと共に登録される
- シングルスレッドは、プログラム全体で1つのスレッドのみを使用し、スタックに取り出したタスクを実行する
- キューから1つのコールバックを取得する
- 取得したタイムスタンプが現在のイベントループのタイムスタンプよりも小さい場合、Immediate Queueに登録される
- 取得したコールバックがタイムスタンプ付きでTimer Queueに登録される、また、I/O Callback QueueやClose Callback Queueに登録されたコールバックが実行される。
- 同時に、プロセスがCPU時間を満たす限り、Idle Callback Queue内のコールバックが実行される
- 3-7を繰り返す
簡単に言うと、BrowserのEvent Loopは、非同期タスクを行うたびにキューに登録し、スタックが空の時にキューからタスクを取り出して実行する、という単純な仕組みです。 一方、Node.jsのEvent Loopは、5つのキューに応じたコールバックを登録し、その優先度に従って実行していきます。また、Idle Callback Queueを設けることで、プログラムが時間をムダに消費することがないように一定の制御を行っています。