2016-07-06 67 views
2

所以這是我的節點是如何工作的理解:如何編寫利用線程的Node.js代碼?

其中所有的JS代碼執行
  • 單線。
  • IO /網絡調用利用場景後面的線程池。 (使用libuv這是一個C++庫)
  • 一旦IO操作完成,它的回調被壓入回調隊列,並且回調可以被下一個滴答中的事件循環拾取。

我想了解的是如何編寫可以利用系統線程的代碼?我在C/C++中編寫一個庫併爲此提供一個Javascript綁定?

比方說,我有一些不需要IO但是CPU密集型的操作/功能,所以我想在多個線程中運行它。我將如何在Node中做到這一點?

回答

0

我的理解是,這不能用Node來完成。當然,您可以用另一種語言編寫程序並編寫一些綁定,但Node本身不具備多線程功能。您可以改爲使用多編程:啓動Node程序的多個實例並通過HTTP交換消息。然後,您的操作系統將處理程序實例在不同CPU核心上的分發。

0

Well Node使用libuv,它實現了一個線程池。有一個很好的解釋,請閱讀here。櫻桃採摘的洞察力從文章

的libuv庫維護所使用的node.js 在後臺執行長時間運行的操作線程池,不阻塞 其主線程。有效地,深入淺出,node.js是基於線程的 ,無論你喜不喜歡。

因此,也許調查libuv如何做到這一點,以及它如何與Node進行交互,並基於自己的方法?

This answer很好地解釋了一些事情,顯示了一些libuv代碼,並且引用了另一個great article on libuv