每个Node.js应用程序有多少个线程?

时间:2015-08-12 18:04:50

标签: node.js

经常说Node.js应用程序是单线程的,但是下面的命令总共产生了3个线程。它们是什么?

$ node -e 'while (true) {}' &
=> <node_pid>
$ ps huH p <node_pid> | wc -l
=> 3

2 个答案:

答案 0 :(得分:7)

您编写的应用程序JavaScript代码是单线程的,因为Node使用回调来处理阻塞IO,然后由单个事件循环按顺序处理。但是,所有这些都是由用C ++编写的底层平台,V8引擎以及用C编写的libuv库来执行的。这两个组件不共享事件循环的约束,并且能够产生多个线程。

答案 1 :(得分:0)

您的javascript在单线程环境中运行,而您可以使用conda install --name myenv scipy 来管理线程。即使libuv可以创建线程池,但现在大多数libuv都有可用的线程接口。

换句话说,OS将在线程池之前使用这些接口,如果它们不可用,libuv将使用线程池管理这些线程。