[Javascript] Event Loop


javascript event loop


JavaScript言語自体はマルチスレッドをサポートしていませんが、複数のリクエストを同時に処理するにはどうすればいいですか?
@説明を少し加えると、nodejsの동시성を使用してアプリケーションを並列に使用できます.
ただし、これは、1つのプロセス上で単一スレッドとして実行されるアプリケーションを並列に使用する方法です.cluster 환경の概念は、アプリケーションコード自体の動作に関連する.
したがって,event loopの概念を理解する必要があり,実際にはECMAScript言語spec自体にイベントループは存在しない.
エンジン環境では、event loopまたは브라우저などのイベントループを担当します.

Call stack, Task Queue (Callback queue).


まず名前を見てみましょう.
  • javascriptエンジンnodeJsに現在実行されている関数があります.
  • call stackは、特定の要求の後に非同期で実行されるコールバック関数を順次入力する.
  • 単一呼び出しスタック、run to completion。

  • callstackにはtask queue 혹은 callback queueしか存在しません.
  • runtocompletionは하나의 호출 스택である.
    つまり、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リクエストを発行したり、特定のイベントリスナーを介して複数のイベントを処理したりする.
    リファレンス
  • https://blog.sessionstack.com/how-javascript-works-event-loop-and-the-rise-of-async-programming-5-ways-to-better-coding-with-2f077c4438b5