当前位置: 首页 > 面试题库 >

NodeJS真的是单线程的吗?

公冶安怡
2023-03-14
问题内容

Node.js通过使用事件循环而不是线程,将基于事件的模型置于核心,从而解决了“每个连接一个线程的问题”。所有昂贵的I /
O操作始终与在启动操作完成时执行的回调异步执行。

如果发生任何操作,则由epoll()之类的多路复用机制处理该观察。

我的问题是:

  • 为什么在使用阻塞系统调用select / epoll / kqueue时NodeJS不阻塞?

  • 还是根本不是NodeJS单线程,因此需要第二个线程
    来观察具有select / epoll / kqueue的所有I / O操作?


问题答案:

NodeJS事件事件 (来自网站的第二行),不是单线程的。它在内部处理执行选择/ epoll /
kqueue处理所需的线程,而无需用户明确地进行管理,但这并不意味着其中没有线程使用情况。



 类似资料:
  • Redis6.0之前是单线程的,Redis6.0之后开始支持多线程; redis内部使用了基于epoll的多路服用,也可以多部署几个redis服务器解决单线程的问题; redis主要的性能瓶颈是内存和网络; 内存好说,加内存条就行了,而网络才是大麻烦,所以redis6内存好说,加内存条就行了; 而网络才是大麻烦,所以redis6.0引入了多线程的概念, redis6.0在网络IO处理方面引入了多线

  • 本文向大家介绍NodeJs是基于单线程的吗?为什么?相关面试题,主要包含被问及NodeJs是基于单线程的吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 js 本身就是 single thread,NodeJS 发明者将 Chorme v8 vm 引擎 runtime 加上 async io 使得效能得以突出,所以 NodeJS 的发明者完成 libuv 就离开 NodeJS 了。

  • 问题内容: 我在这里谈论基本用法: 谷歌搜索以上问题,说是,但不是 -接受的答案是,是,但后续行动是否;Spring.io表示是和否,并且似乎是Java EE专家的Adam Bien给出了不合格的yes。 我对一个简单的调度bean的经验表明答案是否定的: 抽象界面: 开始于: 如果我打印出,即使我在两次调用之间仍在同一线程上,也会得到: 严重:java.lang.IllegalStateExce

  • 根据我的理解,每个Vert.x实例都将被分配一个事件循环。事件循环处理该特定实例的所有请求和其他任务。事件循环是一个线程,我认为。当部署了多个Vert.x实例时,每个实例都有自己的事件循环,对吗?这意味着存在多个线程(multi-threading)。我就是这么理解的。这个单线程概念让我非常头疼。任何帮助都将不胜感激。

  • 问题内容: 我对Javascript的单线程性质有疑问。 此代码的结果是。如您所见,这之后让我感到奇怪的是,在单线程环境中是否应该不应该这样做?如果没有,那么JS怎么知道第二个应该在第一个之前完成?难道不应该有两个线程可以同时工作以完成两个s以便进行通知吗? 问题答案: JavaScript(在浏览器中) 不能 同时运行2。 最多 一个 的的回调可以同时执行-因为有 一个 JavaScript执行

  • 问题内容: Scrapy中很少有并发设置,例如CONCURRENT_REQUESTS。这意味着Scrapy搜寻器是多线程的吗?因此,如果我运行它,将在字面上并行触发多个同时请求?我问是因为,我读过Scrapy是单线程的。 问题答案: Scrapy是单线程的,除了交互式外壳程序和一些测试之外,请参见source。 它建立在Twisted的基础上,Twisted也是单线程的,并且利用了它自己的异步并发