ホームページ > ウェブフロントエンド > jsチュートリアル > Node.js ワーカー スレッドによる並列処理の解放

Node.js ワーカー スレッドによる並列処理の解放

Barbara Streisand
リリース: 2024-09-21 06:33:07
オリジナル
848 人が閲覧しました

Unleashing Parallel Processing with Node.js Worker Threads

ワーカー スレッドにより、Node.js での真の並列処理が可能になり、CPU を集中的に使用するタスクに最適です。さあ、飛び込みましょう。

なぜワーカースレッドなのか?

  1. JavaScript コードの並列実行
  2. 共有メモリ機能
  3. CPU バウンドの操作に最適

基本的な使い方

const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
  const worker = new Worker(__filename);
  worker.on('message', (msg) => console.log('From worker:', msg));
  worker.postMessage('Hello, Worker!');
} else {
  parentPort.on('message', (msg) => {
    console.log('From main:', msg);
    parentPort.postMessage('Hello, Main!');
  });
}
ログイン後にコピー

データの受け渡し

  1. 構造化クローン アルゴリズム (デフォルト)
  2. 転送可能なオブジェクト
  3. ゼロコピー転送用の SharedArrayBuffer
const { Worker } = require('worker_threads');

const worker = new Worker('./worker.js');

const sharedBuffer = new SharedArrayBuffer(4);
const arr = new Int32Array(sharedBuffer);
arr[0] = 123;

worker.postMessage({ sharedBuffer });
ログイン後にコピー

ワーカープール

const { StaticPool } = require('node-worker-threads-pool');

const pool = new StaticPool({
  size: 4,
  task: (n) => n * 2
});

async function runTasks() {
  const results = await Promise.all([
    pool.exec(10),
    pool.exec(20),
    pool.exec(30)
  ]);
  console.log(results); // [20, 40, 60]
}

runTasks().catch(console.error);
ログイン後にコピー

ベストプラクティス

  1. I/O 操作ではなく、CPU 集中型のタスクに使用します
  2. 適切なエラー処理を実装する
  3. 競合状態を避けるために共有リソースを慎重に管理してください
  4. リソース管理を改善するためにワーカー プールの使用を検討してください

パフォーマンスに関する考慮事項

  1. スレッドの作成にはオーバーヘッドがあります。可能な場合はワーカーを再利用します
  2. 利用可能な CPU コアとワーカー数のバランスをとります
  3. スレッド間のデータ転送を最小限に抑える

避けるべき落とし穴

  1. 単純なタスクの過剰使用 (スレッドにはオーバーヘッドがある)
  2. 完了時にワーカーを終了させることを怠った
  3. 自動負荷分散を前提としています (これを管理する必要があります)

ワーカー スレッドは、CPU 負荷の高いタスクの並列処理に最適です。賢く使用して、Node.js アプリケーションを強化してください。

乾杯?

以上がNode.js ワーカー スレッドによる並列処理の解放の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート