2017-10-21 82 views
0

我在嘗試對1000萬個值的數組進行排序。從發現新技術Microsoft - Napa.js允許使用多線程與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如果它需要執行此任務。

Ant至少如何使用所有這些知識爲我的線程創建共享內存?

回答

1

更新:

Napa.js(> = 0.2.0)現在支持傳輸內置類型的JavaScript如SharedArrayBuffer而不進行復制。對於特定的問題,您可以找到示例Parallel Quick Sort


這是一個有趣的問題。目前,在Napa.js中默認序列化/反序列化在工作人員之間傳遞的參數。我們可能希望更好地解決跨工作者共享陣列而不復制的問題。

我看到的可行性如下:

  1. 假設我們使用INT32陣列中的主要JS 線程持有10M值。
  2. 創建一個插件,通過 v8 :: Int32Array :: Buffer():: Externalize()獲取數組的原始指針。 (這讓用戶管理 的內存,我們可能需要一些生命週期管理)
  3. 將原始指針傳遞給另一個工人。
  4. 工作者從原始指針(通過外部化ArrayBuffer)創建v8 :: Int32Array 。

這種模式非常常見,我認爲將它包含在Napa.js中可能是一個好主意。我已經提出了一項功能請求Introduce Buffer class that can be transferred across workers without copying

BTW,TransportContext用於從一個工人轉移std::shared_ptr另一工作人員,在這種情況下,我認爲這更多的是我們如何在工共享陣列。

+0

謝謝你的回答!像你的[路線圖](https://github.com/Microsoft/napajs/wiki/roadmap)。期待這些事情都完成了 –