2012-10-07 149 views
2

可能重複:
「Spawn a thread」-like behaviour in node.js不要等待函數來完成

我怎樣才能讓我的代碼繼續無需等待大量的操作才能完成?

var foo = function() 
{ 
    var i = 1000000000; 
    while (i > 0) 
    { 
     i--; 
    } 
}; 
console.log("start"); 
foo(); 
console.log("end"); 

編輯 這不是用於Web開發。我正在使用node.js

+1

也許看看異步庫? – chovy

+0

async.js是一個流量控制庫,就像提到的chovy一樣。而node.js也支持較低級別的操作,例如像elclanrs提到的那樣啓動一個單獨的web_worker或子進程。在這種情況下,這兩者中的任何一個都會幫助你。 – chinnychinchin

+0

實際上,我是要去提供更好的鏈接,但我想這工作得很好https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers – elclanrs

回答

3

node.js中,您可以使用process.nextTick()。它會推遲執行長時間運行的任務,直到事件循環的下一個傳遞。

var foo = function() 
{ 
    var i = 1000000000; 
    while (i > 0) 
    { 
     i--; 
    } 
}; 
console.log("start"); 
process.nextTick(foo()); 
console.log("end"); 

請記住,而這將允許該請求立即返回,它仍然會阻塞線程時,它最終會被執行。 Node.js不適用於長時間運行的CPU密集型任務,它針對大量輕量級連接進行了優化。

如果您需要使用節點完成CPU密集型工作,您應該查看作業隊列(如kue或任何其他發佈/訂閱實現),將作業放置到第二個node.js進程可以偵聽的隊列中新作業並執行它們。

這將允許您的主節點進程快速處理新請求,並允許一對後臺節點進程處理所有這些長時間運行的作業。