当前位置: 首页 > 知识库问答 >
问题:

诺德是怎么来的。js只使用有限的线程时速度更快?

燕鸿文
2023-03-14

我一直在学习Node.js,但是我有一个问题在任何地方都找不到答案。这是我对Node.js=

>

  • 它在其体系结构中是单线程的,并且由于其基于事件的异步非阻塞循环,因此可以有效地使用CPU利用率。

    它如何执行这些异步请求是在内置库libuv的帮助下完成的,该库在其内部线程池中使用线程(默认为4个线程)。所有这些都远离节点.js使用的“主”主线程。因此,我们不必担心这一点。

    但是,这是我的问题 - 假设一次有100个异步请求(假设文件)。因为没有。libuv使用的线程是有限的,node.js如何一次处理这100个异步请求?理想情况下,它应该有 100 个线程来处理这 100 个异步请求,以便将数据快速响应回事件队列。这比多线程进程到底有多快?

  • 共有1个答案

    颜熙云
    2023-03-14

    这到底比多线程进程快多少?

    简单的答案是,有时不是。没有平台/语言/编译器最适合每个可以想象的场景。

    但是,有时它更快。处理许多线程有其自身的问题(例如,线程共享CPU内核,线程死锁,争用条件等)。在某些情况下,node的方法更快,因为它没有那么多开销来处理这些问题。在其他情况下,它可能不会更快。

    也就是说,如果您发现CPU有限,您可以做一些事情(例如工作线程)来让node.js适应您的环境。这在web服务器上很常见,因为工作线程的数量与CPU内核的数量一样多。(或内核减1,为操作系统留出一个空闲内核,等等)

     类似资料:
    • 问题内容: 现在我正在研究如何尽快从网站获取数据。为了获得更快的速度,即时通讯正在考虑使用多线程。这是我用来测试多线程和简单文章之间差异的代码。 如您所见,这是一个非常简单的代码。首先,我将模式设置为“ Simple”,然后我可以得到时间间隔: 50s (也许我的速度有点慢:()。然后我将模式设置为“ Multiple”,然后我得到了时间间隔: 35 。从我可以看到,多线程实际上可以提高速度,但是

    • 本文向大家介绍平时是怎么调试JS的?相关面试题,主要包含被问及平时是怎么调试JS的?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 一般用Chrome自带的控制台

    • 本文向大家介绍redis 的线程模型是怎么样的?相关面试题,主要包含被问及redis 的线程模型是怎么样的?时的应答技巧和注意事项,需要的朋友参考一下 redis 内部使用文件事件处理器 ,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。 文件事件处理器的结构包含

    • 本文向大家介绍Web Worker线程的限制是什么?相关面试题,主要包含被问及Web Worker线程的限制是什么?时的应答技巧和注意事项,需要的朋友参考一下 (1)同源限制 分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。 (2)DOM 限制 Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用document、window、

    • 我目前正在尝试了解Redis的一些基本实现内容。我知道redis是单线程的,我已经偶然发现了以下问题:redis是单线程的,那么它是如何做并发I/O的呢? 但我还是觉得我没理解对。Afaik Redis使用一个单线程使用reactor模式。因此,如果我正确理解了这一点,那么有一个观察者(它处理FDS/传入/传出连接)将要完成的工作委托给它的注册事件处理程序。他们做实际工作并设置。他们的响应作为事件

    • 问题内容: 我有一个我无法回答的问题。 假设您在Java中具有以下循环定义: 如果循环不是无限循环并且 程序仅使用一个线程,* 则的类型和值 是 什么? * 问题答案: Double.equals()的API 给出了答案:“ Double.NaN == Double.NaN的值为false”。Java语言规范中的“ 浮点类型,格式和值 ” 对此进行了详细说明: 是无序的,所以数值比较运算,,,和