经常说Node.js应用程序是单线程的,但是下面的命令总共产生了3个线程。它们是什么?
$ node -e 'while (true) {}' &
=> <node_pid>
$ ps huH p <node_pid> | wc -l
=> 3
答案 0 :(得分:7)
您编写的应用程序JavaScript代码是单线程的,因为Node使用回调来处理阻塞IO,然后由单个事件循环按顺序处理。但是,所有这些都是由用C ++编写的底层平台,V8引擎以及用C编写的libuv
库来执行的。这两个组件不共享事件循环的约束,并且能够产生多个线程。
答案 1 :(得分:0)
您的javascript在单线程环境中运行,而您可以使用conda install --name myenv scipy
来管理线程。即使libuv
可以创建线程池,但现在大多数libuv
都有可用的线程接口。
换句话说,OS
将在线程池之前使用这些接口,如果它们不可用,libuv
将使用线程池管理这些线程。