0

10millionの値の配列をソートしようとしています。 から新しい技術が見つかりました。使用可能なNapa.jsマルチスレッド with Node.js私たちは、次のコードを使用ありNode.js Napajsの並列タスク

const napa = require('napajs') 
const zone = napa.zone.create('zone', { workers: 4 }); 
zone.execute((...args) => { 
    // here I can take anything I want to execute in a native thread 
    // but it is also possible to implement shared memory for all 
    // threads, but I can't find out how 
}, [args]) 

は私が理解するのに役立ちを、に何がを割り当てます。 ハンドラと、このタスクに必要な場合はTransferContextの使い方を教えてください。

少なくとも、この知識を使って自分のスレッドの共有メモリを作成する方法は?

答えて

1

更新:

Napa.jsは(> = 0.2.0)今コピーすることなく、このようなSharedArrayBufferなどの組み込み型のJavaScriptを輸送サポートしています。この問題の具体例は、Parallel Quick Sortです。


これは興味深い問題です。現在、Napa.jsでは、ワーカー間を引き渡す引数は、デフォルトでシリアル化/デシリアライズされます。私たちは、コピーせずにワーカー間でアレイを共有するより良いソリューションを望むかもしれません。

私は次のように可能性を見た:

  1. は我々がメインJS スレッドで10M値を保持するためにINT32配列を使うと仮定します。
  2. アレイの生ポインタを取得するためのアドオンを作成します。 v8 :: Int32Array :: Buffer():: Externalize()。 (これにより、ユーザーは のメモリを管理できます。ライフサイクル管理が必要な場合があります)
  3. 生ポインタを別のワーカーに渡します。
  4. Workerは、(外部化されたArrayBufferを介して)生ポインタからv8 :: Int32Array を作成します。

このパターンは非常に一般的なので、Napa.jsに含めることをお勧めします。私は機能要求Introduce Buffer class that can be transferred across workers without copyingを配置しました。

私はstd::shared_ptrを1人のワーカーから別のワーカーに転送するために使用されています。この場合、ワーカー間で配列を共有する方法について詳しく説明します。

+0

ありがとうございました!あなたの[ロードマップ](https://github.com/Microsoft/napajs/wiki/roadmap)のように。これらのことが終わるのを楽しみにしています –

関連する問題