2
我怎樣才能讓我的代碼繼續無需等待大量的操作才能完成?
var foo = function()
{
var i = 1000000000;
while (i > 0)
{
i--;
}
};
console.log("start");
foo();
console.log("end");
編輯 這不是用於Web開發。我正在使用node.js
我怎樣才能讓我的代碼繼續無需等待大量的操作才能完成?
var foo = function()
{
var i = 1000000000;
while (i > 0)
{
i--;
}
};
console.log("start");
foo();
console.log("end");
編輯 這不是用於Web開發。我正在使用node.js
在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進程可以偵聽的隊列中新作業並執行它們。
這將允許您的主節點進程快速處理新請求,並允許一對後臺節點進程處理所有這些長時間運行的作業。
也許看看異步庫? – chovy
async.js是一個流量控制庫,就像提到的chovy一樣。而node.js也支持較低級別的操作,例如像elclanrs提到的那樣啓動一個單獨的web_worker或子進程。在這種情況下,這兩者中的任何一個都會幫助你。 – chinnychinchin
實際上,我是要去提供更好的鏈接,但我想這工作得很好https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers – elclanrs