node.js如何工作?

我不明白关于nodejs的几件事情。 每个信息源都说node.js比标准线程的web服务器更具可扩展性,这是由于缺less线程locking和上下文切换,但是我想知道,如果node.js不使用线程,它如何处理并发请求? 事件I / O模型意味着什么?

非常感谢您的帮助。 谢谢

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

一个新的请求进来是一种事件。 服务器开始处理它,当有一个阻塞IO操作时,它不会等到它完成,而是注册一个callback函数。 服务器立即开始处理另一个事件(也许是另一个请求)。 当IO操作完成时,这是另一种事件,服务器将通过执行callback来处理它(即继续处理请求)。

所以服务器永远不需要创build额外的线程或在线程之间切换,这意味着它的开销很小。 如果要充分利用多个硬件核心,只需启动多个node.js实例即可

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

虽然问题已经在很长一段时间之前解释过了,但我也正在考虑这个问题。

节点JS是单线程技术。 基本上,Node JS创build者(Ryan Dahl)担心的是使用multithreading的并行处理不是正确的方式,也不是太复杂。

如果node.js不使用线程,它如何并行处理并发请求

答:当你说它不使用线程时,这是完全错误的句子,节点Js使用线程,但以一种聪明的方式。 它使用单线程来处理线程池(libuv)中的所有HTTP请求和多个线程,以处理任何阻塞操作

Libuv:处理asynchronousI / O的库。

事件I / O模型意味着什么?

Ans:正确的术语是非阻塞的I / O。 它几乎不会像Node JS官方网站所说的那样阻塞。 当任何请求到达节点服务器时,它不会排队请求。 它接受请求并开始执行,如果阻塞操作被发送到工作线程区域,并且在代码执行完成后立即为其注册callback,则触发相同的callback并进入事件队列并在事件循环之后再次被处理创build响应并发送给相应的客户端。

有用的链接: 点击这里