我使用節點子進程模塊分流進程,從而卸載Express請求 - 響應週期中的一些進程。我基本上有一個快速的中間件下面的代碼:當父節點在節點中分出一個長時間運行的子進程時,請求處理器速度變慢
forkedProcess = child.fork(scriptFile);
forkedProcess.send(messageToChild);
forkedProcess.on('message',function(messageFromChild) {...});
子進程
然後,我有:
process.on('message', function(messageFromParent) {....});
process.send('messageToParent);
process.exit(0);
測試時,我決定插入一些虛擬的語句保住孩子進程運行這樣才能在此期間向父母發送另一個請求。問題是第二個請求需要很長時間才能響應。請求處理程序本身在第二個請求上不會啓動幾秒鐘。
我無法理解爲什麼?子進程不應該阻止父主要事件循環,顯然不會因爲第二個請求在第一個請求的子進程退出之前得到處理,但這需要很長時間。如果我從子進程獲取虛擬語句,則請求 - 響應循環正常工作。我模擬了測試用例,因爲子進程是根據一些開發者腳本動態生成的。這些開發者腳本不應該減慢主循環...顯然它確實。爲什麼?
您每次收到一個新的請求時都會分叉一個子進程? – Vineet
@ vineet.hawal是的,我爲每個請求分派。每個進程可能會根據請求類型而有所不同,但對於示例,我正在使用與分支相同的腳本進行基準測試。我也嘗試將數據作爲命令行參數發送給孩子,而不是通過child.send()發送,這也沒有幫助。 – Sam