2014-03-31 43 views
-1

我有一個主要功能,作爲兩個子功能a()和b()。異步使用裏面的子功能

function main() { 
a(); 
b(); 
} 

如何在此使用異步模塊。我想要一個()和b()並行運行。

回答

0

https://github.com/caolan/async#parallel

使用並行方法。

但請注意並行在這裏有誤導。事實上,因爲節點是單線程的,所以不會並行運行。會發生什麼是,如果函數是異步的,第一個將被啓動並開始一個異步操作,第二個將被啓動,並且將等待回調被調用。當兩者都呼叫回調時,將調用異步#並行的回調。但是,在async#parallel中執行同步函數是沒有意義的,因爲它們只是按順序運行。

異步適用於涉及對其他進程(如數據庫)的請求的IO操作。它允許節點執行一個b()函數,而一個()等待請求數據庫返回,所以它是「非阻塞」。但它不允許b()與a同時執行指令。如果你的a()函數只是一系列同步指令,它們將會執行直到函數返回,然後只有它纔會檢查事件循環,並且如果被回調調用,則會執行b()。

如果您想真正並行工作(例如,使用多核處理器),請使用節點中原生提供的集羣模塊。它可以讓你產生幾個進程。但是你不應該用它來並行地執行單機功能,而是要在你的服務器進程中產生幾個克隆,或者在後臺執行其他進程中的繁重任務,這樣他們就不會阻塞你的服務器進程。g