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

node.js如何工作?

王德华
2023-03-14
问题内容

我不了解关于nodejs的几件事。每个信息来源都说,由于缺少线程锁定和上下文切换,node.js比标准线程化Web服务器更具可伸缩性,但是我想知道,如果node.js不使用线程,它将如何并行处理并发请求?事件I
/ O模型意味着什么?

非常感谢您的帮助。谢谢


问题答案:

节点完全是事件驱动的。基本上,服务器由一个线程处理一个事件接着另一个事件组成。

一个新的请求进入是一种事件。服务器开始处理它,并且当发生阻塞的IO操作时,它不会等到完成后才注册回调函数。然后,服务器立即开始处理另一个事件(可能是另一个请求)。IO操作完成后,这是另一种事件,服务器将在有时间时通过执行回调来处理它(即继续处理请求)。

因此,服务器无需创建其他线程或在线程之间切换,这意味着其开销很小。如果要充分利用多个硬件内核,只需启动多个node.js实例

更新 在最低级别(C
++代码,而不是Javascript),node.js中实际上有多个线程:有一个IO工作器池,其工作是接收IO中断并将相应的事件放入要处理的队列中通过主线程。这样可以防止主线程被中断。



 类似资料:
  • 问题内容: 根据Node0.4.3的API文档,该函数启动一个例程,该例程将 注意上的更改。每次访问文件时都会调用该侦听器。 它还说 提供的if应该是包含两个成员的对象,boolean 和,以毫秒为单位的轮询值 这表明它将每隔一段时间检查一次。但这也说 默认值为。 那么这是否意味着它将每毫秒检查一次文件时间是否更改?它是否监听操作系统级别的事件?这是如何运作的? 问题答案: 是的,cpedros是

  • 问题内容: 我对Node.js流有疑问-特别是它们在概念上如何工作。 不缺少有关如何使用流的文档。但是我很难找到流在数据级别如何工作。 我对Web通信HTTP的有限理解是,来回发送完整的数据“包”。类似于个人订购公司目录,客户端向服务器发送GET(目录)请求,然后服务器以目录进行响应。浏览器不会收到目录的页面,而是会收到整本书。 节点流可能是多部分消息吗? 我喜欢REST模型- 尤其是它是无状态的

  • 问题内容: 在我提出疑问之前,我至少应该解释一下使用中间件时发生的事情。要使用中间件,要使用的功能是。在执行中间件时,它将使用或使其调用下一个中间件,从而不再调用任何中间件。这意味着我放置中间件调用的顺序很重要,因为某些中间件依赖于其他中间件,而接近末尾的某些中间件甚至可能不会被调用。 今天,我正在开发应用程序,并在后台运行服务器。我想进行一些更改并刷新页面,然后立即查看更改。具体来说,我正在更改

  • 问题内容: 我尝试了这个: 所以我想象require()可能是这样实现的: 那正确吗?请帮助我了解require()或在哪里可以找到源代码。谢谢! 问题答案: 源代码在这里。/ 不是关键字,而是全局变量。你的主要脚本包前开始在其拥有所有喜欢全局的功能,等在其上下文。 请注意,虽然module.js本身正在使用,但这是一个不同的require函数,它是在名为“ node.js”的文件中定义的 上面的

  • 问题内容: 输出如下: 我原以为takes2Second函数会在takes5Second开始之前完全完成。那是应该如何工作的。请告诉我。最后的功能永远不会运行。谢谢。 问题答案: 不完全的。您正在立即执行这些功能(对数组求值后立即执行),这就是它们似乎同时启动的原因。 传递给要执行的每个函数的回调在异步库内部。您可以在函数完成后执行它,并传递错误和/或值来执行它。您无需自己定义该功能。 最终函数永

  • 问题内容: 使用Express.js,会话非常简单。我很好奇它们实际上是如何工作的。 它在客户端上存储一些cookie吗?如果是这样,我在哪里可以找到该Cookie?如果需要,如何解码? 我基本上希望能够查看用户是否已登录,即使当时用户实际上不在该站点上(例如,当您在其他站点上时,facebook如何知道您已登录)。但是我想了解的是,我应该首先了解会议的工作方式。 问题答案: 我从未使用过Expr