2013-03-24 69 views
1

我必須服務通過算法計算,我已經被告知每每個打開的插座使用一個子進程,什麼我將做的是類似的東西:產卵child_processes的限制是什麼?

var spawn = require('child_process').spawn; 
var child = spawn('node', ['algorithem.js']); 

我知道如何發送參數算法過程以及如何接收結果。

我所關心的是,我可以擁有多少個套接字(每個套接字都會產生一個進程)? 如何通過我的雲託管提供商解決此問題?以便我的應用程序獲得自動縮放?

什麼是推薦的節點js雲託管提供商?

最後,這是使用子進程的好方法嗎?

回答

4

是的,這是一個公平的方法,當你不得不在節點中進行一些繁重的處理。但是,啓動新流程會引入一些開銷,因此請注意。您可以打開的套接字數量(文件描述符)受操作系統限制。在Linux上,可以使用例如ulimit-utility的限制。

一個替代方法,即刪除套接字/進程的數量的擔心,是運行一個單獨的算法/計算服務器。這個服務器可以產生N個工作線程,並在套接字上偵聽。當收到一個計算請求時,這可以例如排隊並由第一個可用線程處理。這種方法的一個優點是您的計算服務器可以在任何機器上運行,爲您的節點實例釋放資源。

+0

實際上,我使用節點服務器只是爲了這個算法的計算,但是你的意思是「這個服務器可能產生N個工作線程」?是不是每個產卵過程都是一個線程呢?或者我必須由我自己創建線程?你能寫一個簡單的例子來說清楚嗎?謝謝 – simo 2013-03-24 14:35:32

+0

對不起,我的意思是其他服務器進程。每個產生的進程都是一個獨立的進程,但spawn()使用popen-system調用來提供通信。節點是單線程的,所以它不能創建正常的線程。我的例子背後的動機是提供一種替代方法,可以減少打開的套接字的數量。 – 2013-03-24 14:41:44

+0

你能解釋一下我該如何減少打開的套接字的數量?一個套接字可以服務多個連接嗎? – simo 2013-03-25 10:41:00