首页 > 解决方案 > Node.js 中的单线程究竟是如何工作的?

问题描述

我目前正在详细阅读 Node.js 如何在幕后工作。我的问题是关于它的单线程架构和事件循环。我已经熟悉其中的大部分内容,但有一件事让我感到困惑。一位在线讲师说,如果在“顶级”代码中,调用重的同步函数是可以的。我知道它甚至在事件循环开始之前就运行了,但它是否仍然阻止其他用户,因为它在单线程上?

标签: javascriptnode.js

解决方案


作为服务器启动的一部分运行同步操作是很常见的,这完全没问题。事实上,如果你在服务器启动中不使用同步操作,启动代码可能要复杂得多。

例如,require()操作是同步的和阻塞的。所以,是的,在代码的服务器启动部分使用同步代码是完全可以的。

但是,一旦你的服务器启动了,fs.readFileSync()在任何类型的请求处理程序中使用同步 I/O 代码都会破坏服务器的可伸缩性。

我知道它甚至在事件循环开始之前就运行了,但它是否仍然阻止其他用户,因为它在单线程上?

如果同步代码在服务器开始服务请求之前,那么还没有其他用户阻塞。它只是让服务器运行的代码的一部分。

如果同步代码是在服务器开始服务请求之后,那么是的,它会在同步代码运行时阻止其他请求被处理,这将是一件不受欢迎的事情,因为它会显着降低服务器的可伸缩性和响应能力。


推荐阅读