2013-10-13 25 views
2

我正在開發一個完全無阻塞的node.js應用程序。Node.js和線程

然而有幾個CPU密集型功能:

  • CryptoJS.AES解密/加密
  • UUID創建
  • 數據創建內容

現在我找到了一個模塊來使用線程卸載CPU密集型任務中的事件循環: node-webworker-threads

我應該現在就創建:

  1. 在應用程序的啓動:每一個功能的線程,因此AES.decrypt是一個線程,因爲是AES.encrypt等
  2. 在應用程序的啓動:每功能的線程池? (多少個線程?每個CPU核心1個?)
  3. 執行時:每個函數進入一個新線程,並在完成後將其銷燬?

線程是什麼我還不完全瞭解..

+0

你有沒有基準測試過這些函數有多快被沒有線程的Node處理?我的MBP可以產生大約136K(uuid-v4)至760K(uuid-v1)的UUID秒,給出一個想法... – robertklep

+0

沒有基準測試,但我看到有機會使用線程完成這些任務。看着你的MBP結果,我不會使用線程。也許我會稍後添加它。我已經在使用羣集。感謝評論robert! – xrDDDD

回答

5

這完全取決於你的應用程序。如果使用固定大小的線程池,則如果請求數>可用線程數可能會導致一些擁塞,則必須實現隊列。

最好的方法(在我看來,當然是)爲每個請求產生一個新線程,處理AES,UUID和數據。也就是說,每個請求執行所有計算的一個線程。當一切都完成後,返回線程的結果並殺死它。

這當然可以在高負載的服務器上產生許多線程;但會保持你的事件循環清晰。

編輯:This thread對您而言可能是件有趣的事。