2016-07-06 64 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