如何编写利用线程的Node.js代码?

所以这是我对节点如何工作的理解:

  • 所有JS代码都在其中执行的单线程。
  • IO /networking调用在场景后面使用线程池。 (使用libuv这是一个C ++库)
  • 一旦IO操作完成,它的callback被压入callback队列,并且callback可以被下一个滴答中的事件循环拾取。

我想了解的是如何编写可以利用系统线程的代码? 我在C / C ++中编写一个库,并提供一个JavaScript的绑定?

比方说,我有一些不需要IO但是CPU密集的操作/function,所以我想在多个线程中运行它。 我将如何做到这一点在节点?

我的理解是,这不能用Node来完成。 当然,您可以使用其他语言编写程序并编写一些绑定,但是Node本身不具备multithreadingfunction。 您可以使用多编程:启动Node程序的多个实例并通过HTTP交换消息。 然后您的操作系统将处理您的程序实例在不同CPU核心上的分发。

Well节点使用libuv ,它实现了一个线程池。 有一个很好的解释在这里阅读。 樱桃从文章中挑选一个洞察力

libuv库维护一个由node.js用来在后台执行长时间运行的操作的线程池,而不会阻塞其主线程。 有效的是,深入浅出,node.js是基于线程的,无论你喜不喜欢。

那么也许可以调查libuv如何做到这一点,以及它如何与Node进行交互,并根据自己的方法?

这个答案很好地解释了一些事情,展示了一些libuv代码,并且引用了libuv上的另一篇很棒的文章 。