[Javascript] Event Loop
4784 ワード
javascript event loop
JavaScript言語自体はマルチスレッドをサポートしていませんが、複数のリクエストを同時に処理するにはどうすればいいですか?
@説明を少し加えると、nodejsの
동시성
を使用してアプリケーションを並列に使用できます.ただし、これは、1つのプロセス上で単一スレッドとして実行されるアプリケーションを並列に使用する方法です.
cluster 환경
の概念は、アプリケーションコード自体の動作に関連する.したがって,
event loop
の概念を理解する必要があり,実際にはECMAScript言語spec自体にイベントループは存在しない.エンジン環境では、
event loop
または브라우저
などのイベントループを担当します.Call stack, Task Queue (Callback queue).
まず名前を見てみましょう.
nodeJs
に現在実行されている関数があります.call stack
は、特定の要求の後に非同期で実行されるコールバック関数を順次入力する.単一呼び出しスタック、run to completion。
task queue 혹은 callback queue
しか存在しません.하나의 호출 스택
である.つまり、callスタックには1つの呼び出しスタックしか存在せず、1つの関数が実行されるまで他の関数は実行できません.
さぎょうモード
const AAA = () => {
for (let i = 0; i < 10000; i++) {}
console.log('AAA');
};
setTimeout(() => {
console.log('BBB');
}, 50);
AAA();
次のコードは、アクションの例です.1.コードを順次実行し、現在実行する関数
하나의 함수가 실행이 끝나야지만 다른 함수가 실행
に入力して実行します.2.運転後
setTimeout을 call stack
単一の呼び出しスタックであるため、常に1つの呼び出しスタックが保持されます.3.settimeoutに渡されたコールバック関数は、WebAPIsのtimer関数によって50 ms後に
call stack이 비워진다
となる.4.
callback queue로 입력
は、event loop
のチェックを続行します.현재 call stack에 실행 중인 task가 있는지, task queue에 실행 대기중인 task가 있는지
call stackが最初のタスクを追加した場合.call stack에 실행 중 task가 없고 task queue에 실행 대기 중인 task가 있다면
はsettimeout()関数を最初に実行し、50 ms後にコールバック関数を転送するとタスクキューで実行が待機します.AAA()関数では、for文がどれだけ時間がかかるかにかかわらず、settimeout()転送コールバック関数は最初に実行されません.
/* 실행 결과 */
// AAA
// BBB
settimeoutではない이 코드에서 중요한 점
もそうです.httpリクエストの結果が表示されると、コールバック関数がタスクキューに追加されます.現在実行中の呼び出しスタックがない場合、イベントループは、タスクキューに最初の関数を呼び出しスタックに追加したときに実行されます.
n/a.結論
XMLHttpRequest와 같은 비동기 함수
,javascriptはevent loopによって非同期同期同期をサポートします.非同期関数を呼び出すと、特定のAPIで処理され、タスクキューに順次追加されます.その後、event loopは定期的にcallスタックが空いているときに適切なタスクを追加して実行します.
정리하면
の形式でもあり、この形式では関数は1つずつしか実行できません.その後、task queueに特定のAPI処理で入力されると、event loopは、queueで実行関数を順次実行し、call stackに追加します.
これは、
Non-Blocking IO
をサポートし、例えば、複数のhttpリクエストを発行したり、特定のイベントリスナーを介して複数のイベントを処理したりする.リファレンス
Reference
この問題について([Javascript] Event Loop), 我々は、より多くの情報をここで見つけました https://velog.io/@jjang9b/Javascript-Event-Loopテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol