Node.JS中的单线程事件循环与多线程非阻塞工作者

基督教

Node.JS的最大优点是它具有非阻塞性。它是单线程的,因此不需要为每个新的传入连接生成新线程。

在事件循环(实际上是单线程)的后面,有一个“非阻塞工作程序”。这个东西不再是单线程的,所以(据我了解),它可以为每个任务产生一个新线程。

也许我误会了一些东西,但是优势到底在哪里。如果要处理的任务很多,那么“非阻塞工作”会不会变成“阻塞工作人员”?

谢谢克里斯蒂安

josh3736

您需要阅读libuv,它是节点非阻塞I / O背后的“魔术”。

从libuv书中摘录的重要一件事是libuv使用主机OS的异步 I / O 设施它不只是为每个连接创建一个新线程

libuv告诉操作系统,它想知道在一组特定的套接字上发生的任何更改(连接状态,接收到的数据等)。然后由操作系统来处理管理连接。操作系统本身可能会创建一个或多个线程来完成此任务,但这不是我们关心的问题。(它当然不会为每个连接创建一个线程。)

对于其他类型的操作,例如对C库的调用可能在计算上是昂贵的(即,加密),libuv提供了可以在其上运行这些操作线程池由于它是一个线程池,因此您不必担心线程数无限制地增长。当池完全繁忙时,操作将排队。

是的,JavaScript在单个线程上运行。是的,节点(通过libuv)在后台产生了许多线程来工作,因此它不需要阻塞JavaScript线程。但是,线程数始终受控制,并且I / O通常甚至不会获得其自己的节点分配线程,因为该线程是由OS处理的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.JS中的单线程事件循环与多线程非阻塞工作者

来自分类Dev

Node.js-单线程,非阻塞?

来自分类Dev

Node.js多线程与Node.js单线程

来自分类Dev

Node.js是单线程还是非单线程?

来自分类Dev

如何在node.js中创建后台单线程FIFO作业队列

来自分类Dev

如何在node.js中创建后台单线程FIFO作业队列

来自分类Dev

对事件循环,多线程,在Node.js中执行readFile()的顺序有疑问吗?

来自分类Dev

Node.js是单线程的,这是否意味着我们不能在不同的线程中运行多个Node.js?

来自分类Dev

node.js中的多线程

来自分类Dev

如果node.js是单线程的,那么server.listen()为什么返回?

来自分类Dev

如果Node.js是单线程的,那么Rails是什么?

来自分类Dev

多核CPU与Java(Tomcat)上的单线程Node.js

来自分类Dev

Node JS中的非阻塞

来自分类Dev

是否将Node.js视为具有工作线程的多线程?

来自分类Dev

ruby 中的多线程比单线程慢

来自分类Dev

同步多线程与单线程

来自分类Dev

与单线程相比,多线程更快

来自分类Dev

多线程比单线程快吗?

来自分类Dev

多线程程序比单线程慢

来自分类Dev

node.js中的非阻塞需求

来自分类Dev

node.js中的非阻塞需求

来自分类Dev

多线程芹菜工作者的任务划分

来自分类Dev

如何在Node.js中使用多线程或进程

来自分类Dev

使用Node.js实现类似多线程的行为

来自分类Dev

sql 查询会阻塞 node.js 事件循环吗?

来自分类Dev

为什么多线程的for循环不如单线程的性能好?

来自分类Dev

关于redis工作的矛盾之处:redis是单线程还是多线程?

来自分类Dev

什么是 Node.js 中的事件驱动非阻塞 IO 模型?

来自分类Dev

可以阻止node.js工作者退出主进程

Related 相关文章

热门标签

归档