2013-10-17 54 views
1

我實現了3個排序算法,我想並行運行它們,並在完成後立即打印它們的console.log。我嘗試使用parallel函數使用異步庫(https://github.com/caolan/async),它似乎不像我期望的那樣行事。我看到了一些關於產生子進程的主題,但是在執行下一個進程之前似乎總是等待一種結束;它始終按執行的順序打印。不管執行順序如何,我認爲我的快速排序會在較慢的排序之前進行打印。是否有可能通過node.js實現這種行爲?如果是這樣,怎麼樣?如果不是,爲什麼不呢?如何運行並行排序算法?

回答

0

我真的很喜歡這個庫:http://adambom.github.io/parallel.js/

你可以使用它像這樣(從文檔):

var slowSquare = function (n) { 
    var i = 0; 
    while (++i < n * n) {} 
    return i; 
}; 

// Create a job 
var p = new Parallel(100000); 

// Spawn our slow function 
p.spawn(slowSquare).then(yourCallback); 
0

排序是同步操作。

由於Node.js是單線程的,因此無法同時運行幾種並行產卵的child processes。單個Node.js進程不能並行運行同步代碼。

你可以做的最好的事情是將每個排序算法包裝成一個元函數,它將產生一個子進程,然後將實際的排序分派給它。

你想在生產中實現並行性,那麼最好使用類似cluster的東西來保留一組工人,而不是爲每個任務產生一個新工人。

有一些即時可用庫具有類似的功能。我剛剛找到一個使用谷歌:node-compute-clusterConnor Blackin his answer上提到了另一個。