週のまとめ-スレッドとプロセス

1636 ワード

hiここは胡斌の先週の仕事の総括です.
Nodeでのスレッドと非同期の理解
いくつかの理解
  • 私たちが書いたjsコードは、単一スレッドの環境で実行されますが、nodejs自体は単一スレッドではありません.コードでpromiseを実行した場合、下位レベルのc++モジュールを介して別のスレッドで完了する可能性がありますか?...しかし、私たち自身のjsコードにとって、それらは単一スレッドにあります.非同期関数の実行が完了して結果をコールバック関数で私たちに伝えると、私たちのコードは一度に1つしか処理できません.
  • nodeが高同時処理を得意とするのは、非同期IOを持つためであり、nodeはIO処理時に主スレッドがN個のサブスレッドを作成して速度を向上させるためであり、複数のスレッドを開いているが、すべてのスレッドが主スレッドに基づいて開いているのは1つのプロセスの中でしか走ることができず、cpuリソース
  • を十分に利用することができないからである.
    シングルスレッドの問題
    var start = Date.now();//       
    setTimeout(function () {
        console.log(Date.now() - start);
        for (var i = 0; i < 10000000000; i++){//     
        }
    }, 1000);
    setTimeout(function () {
        console.log(Date.now() - start);
    }, 2000);
    

    以上の実行後の出力結果は1000、13322で、10秒も待った.logは実行されます.このforサイクルはCPUを非常に食べる計算プロセスですが、ノードのメインスレッドは1つのCPUしか呼び出せません(スレッドはcpuスケジューリングの基本単位であり、1つのcpuは同時に1つのスレッドのタスクしか実行できません).しかし、JS世代コードを書くときにNodeの下部で別のスレッドを開いて非同期を処理する方法のように、サブスレッドを手動で作成すると、この問題は解決します.
    clusterとマルチスレッドモデル
  • clusterは、ノードに内蔵複数のサブプロセスを起動するためのモジュールであり、ノードを使用することができる.jsはマルチコアcpuの性能を十分に利用している.
  • であり、別のTAGGモジュールは、ノードにマルチスレッドモデルをサポートさせ、マルチサブスレッドを開始させることができる.

  • この2つのモジュールについては,プロセスとスレッドの動作原理や違いについてはまだ学習されていないので,次回はこれをまとめましょう.
    シングルスレッドのノードを使ってコードを書くときに注意すべきこと
  • 上のテストでは、メインスレッドでCPUの計算量の大きいタスクを行うと、メインスレッドが詰まったり、長時間停止したりして、プログラム全体の実行が遅延したり、詰まったりする可能性があることが説明されています.プログラムの性能に影響を与えるので、大量のループ、文字列のつなぎ合わせ、浮動小数点演算というcpu密集型タスクを非常に注意して処理しなければなりません.必要に応じて、上記のclusterとマルチスレッドモデルを使用して、タスクをサブスレッドまたはサブプロセスに捨てて完了し、プログラムのメインスレッドのスムーズ化を維持する必要があります.

  • しかし、私はまだ本当にマルチスレッドモデルを使ってプログラミングしたことがありません.上の理論知識はすべてまとめられています.次の使用後、この方面の知識をよくまとめます.