I/O技術(ブロックI/O、非ブロックI/O)

2381 ワード

1.学習目標

  • 開発者の技法の開発への期待点.
  • 用語の違いの理解および説明を挿入することができる.
  • 2.プログラミング(共通)

  • 2.1. きょうつうプロセス
  • コードは、上から下へ順に
  • 配列されている.
  • は一度に1つのイベントしか発生しません.
  • 2.動機


    同期
  • :ある関数の結果が別の関数の終了後に値を計算するのを待つ方法.
  • 3. blocking


    3-1. blocking

  • Webアプリケーションがブラウザで特定のコードを実行して制御権をブラウザに返さない場合、ブラウザは停止したように見える可能性があります.
    この現象を閉塞と呼ぶ.
  • 関数の結果が別の関数によって影響される場合、関数は別の関数の完了を待って値を計算する必要があります.
    そしてこのプロセスが終わる前に、プレイヤーの立場から見ると、プログラム全体が停止しているようです.

    3-2. ブロック例(単一スレッド)


  • simple-sync.html
    const btn = document.querySelector('button');
    btn.addEventListener('click', () => {
    let myDate;
    for(let i = 0; i < 10000000; i++) {
      let date = new Date();
      myDate = date
    }
    
    console.log(myDate);
    
    let pElem = document.createElement('p');
    pElem.textContent = 'This is a newly-added paragraph.';
    document.body.appendChild(pElem);
    });
    

  • 入力
    ボタン
  • には、行長時間の処理を行うためにクリックイベントリスナーが指定されている.(千万回の日付を計算し、最後にコンソールに日付を出力します.)
    完了したら、ページに簡単な文を印刷します.

  • しゅつりょく
  • 2-出力1:コンソールメッセージの速度は毎秒~毎秒です.
    この例を実行すると、JavaScriptコンソールを開き、ボタンをクリックすると、コンソールからメッセージが出力されるまでページに文は表示されません.コードは上から下へ順に実行され、上のコードが処理されるまで、下のコードが実行されます.
  • 2-出力2.ボタンを2回クリックすると、出力速度が遅くなります.
    最初のボタンをクリックし、すぐに2番目のボタンをクリックして、警告ボックスが表示されないことを確認します.最初のボタンは、イベントが終了する前に次の操作をブロックします.

  • の原因となる
  • なぜこのような現象が発生したのですか?答えは、デフォルトではJavaScriptは単一スレッドです.threadsの概念を紹介する必要があります
  • 3-3. Threads


    3-3-1. 単一プロセス


    デフォルトでは、
  • Threadは、プログラムがタスクを完了するために使用できる単一のプロセスです.スレッドごとに1回に1つのタスクしか実行できません.
  • 結果:
    Task A --> Task B --> Task C
  • 3-3-2. マルチCPUコアとマルチプロセス:


  • 前述したように、多くのコンピュータは現在、複数のCPUコアを有しているため、一度に複数のタスクを実行することができる.
    マルチスレッドをサポートするプログラミング言語では、マルチコアコンピュータ上のCPUを使用して複数のタスクを同時に処理できます.

  • 効果:複数のタスクを同時に処理する



  • 結果:
    Thread 1: Task A --> Task B
    Thread 2: Task C --> Task D
  • 3-3-3. JavaScript is single threaded


    JavaScriptは伝統的に単一スレッドです.コンピュータにCPUが複数ある場合でも、mainthreadというスレッドでのみタスクを実行できます.上記の例は次のとおりです.

    3.非同期

  • 非同期:呼び出された関数はすぐに戻り、呼び出された関数はそれぞれ操作を開始します.
  • リファレンス
    [ココ面接]ブロックI/O、同期非ブロックI/O、サブ同期非ブロックI/O