検索

ホームページ  >  に質問  >  本文

node.js - 理论讨论:nodejs的单线程问题

很久以前只有单线程
后来发展成多线程
而现在单线程又开始流行nodejs

1现在的单线程的语言和最早的单线程有什么区别
2还有多线程是否依然在流行,会否被单线程取代?

PHPzPHPz2873日前707

全員に返信(1)返信します

  • 黄舟

    黄舟2017-04-17 14:53:33

    <オル>

  • 初期のシングルスレッド コードは同期型であり、プログラムは常に同期結果を待ってブロックされていました。 ただし、now で言及されている単一スレッド (nodejs など) は非同期であり、呼び出し結果を待機せず、代わりに他の処理を実行し、呼び出し後に続行します。 call result を返します。結果を取得した後、プログラムを実行します。

  • マルチスレッド プログラムの効率は、同時実行量が多い場合にはシングル スレッドよりもはるかに高くなります。また、タスクが分割されている場合にも利点があります。もちろん、マシンリソースを最大限に活用するために、CPU の複数のコアを使用するシングルスレッドのアイデアも開発されています。 たとえば、nodejscluster モジュールです。 ただし、cluster モジュールは複数のコアを使用してコアの数に応じてプロセスの数を増やしますが、各プロセスは互いに独立しており、ポートを共有します。ただし、Java などのマルチプロセス プログラムの場合、プロセスは共有リソースを持っているため、メモリの占有量は少なくなります。

  • それぞれに独自の利点があり、それを補って前進するだけです。それに代わる新しいモデルが登場するかもしれません!個人的な意見。 これがお役に立てば幸いです! !

  • const クラスター = require('cluster');
    const http = require('http');
    const numCPUs = require('os').cpus().length;
    
    if (cluster.isMaster) {
      // フォークワーカー。
      for (var i = 0; i < numCPUs; i++) {
        クラスター.フォーク();
      }
    
      cluster.on('exit', (ワーカー、コード、シグナル) => {
        console.log(`ワーカー ${worker.process.pid} が死亡しました`);
      });
    } それ以外 {
      // ワーカーは任意の TCP 接続を共有できます
      // この場合は HTTP サーバーです
      http.createServer((req, res) => {
        res.writeHead(200);
        res.end('hello world\n');
      }).listen(8000);
    }

    このプログラムは、CPU コアの数に対応するノード プロセスを開始し、ポート 8000 でリッスンします。

    返事
    0
  • キャンセル返事