我有一個繁重的數據處理操作,需要按照10-12的simulatenous請求完成。我已經閱讀了更高級別的併發性Node.js是一個很好的平臺,它通過一個非阻塞事件循環來實現它。我知道,對於像查詢數據庫這樣的事情,我可以產生一個事件到一個單獨的進程(如mongod
,mysqld
),然後有一個回調來處理該進程的結果。很公平。如何在node.js中完成繁重的處理操作
但是如果我想要在回調中完成大量計算,該怎麼辦。它會阻止其他請求,直到該回調中的代碼完全執行。例如,我想處理一個高分辨率的圖像和代碼,我已經在Javascript本身(no separate
進程做圖像處理)。
我想實現的方式是像
get_image_from_db(image_id, callback(imageBitMap) {
heavy_operation(imageBitMap); // Can take 5 seconds.
});
將採取在這5秒中的任何請求heavy_operation
停止節點。或者我正在考慮錯誤的方式來完成這樣的任務。請指導,我是JS新手。
UPDATE
或者也可以像我可以處理局部圖像,使事件循環回去採取其他回調並返回到處理該部分圖像。 (比如優先事件)。
但是,如果我有單獨的進程爲重操作,如果我說的有15個請求進來,會不會它創建15道工序。這將是非常昂貴的。我不喜歡在節點中創建線程。謝謝你的回答。我會接受它,一旦我得到我的懷疑清除:) – 2013-03-10 00:51:04
也檢查我的問題中的更新。 – 2013-03-10 00:51:51
是的,它會創建15個進程,並且據我所知,你不能在Node中創建線程。它有一個線程,這是您的主要事件循環。另一個選擇是編寫一個單獨的Node Worker應用程序,它的任務圖像處理通過消息隊列(RabbitMQ或其他)傳遞給它。然而,這隻會同步處理圖像(一次一個)。如果你想讓它們同時處理,你將不得不創建獨立的進程。 – 2013-03-10 00:59:26