我目前正在详细了解 Node.js 在幕后的工作原理。我的问题是关于它的单线程架构和事件循环。我已经熟悉其中的大部分内容,但有一件事让我感到困惑。一位在线讲师说,如果是在“顶层”代码中,调用重型同步函数是可以的。我知道它在事件循环开始之前运行,但由于它在单线程上,它是否仍然会阻止其他用户?
最佳答案
在服务器启动过程中运行同步操作是很常见的,这是完全可以的。事实上,如果您在服务器启动时不使用同步操作,启动代码可能会复杂得多。
例如,require()
操作是同步且阻塞的。所以,是的,在代码的服务器启动部分使用同步代码是完全可以的。
但是,一旦服务器启动,在任何类型的请求处理程序中使用同步 I/O 代码(例如 fs.readFileSync()
)都可能会破坏服务器的可扩展性。
I understand that it runs before the event loop even starts but doesn't it still block other users since its on the single thread?
如果同步代码发生在服务器开始服务请求之前,则没有其他用户可以阻止。它只是使服务器运行的代码的一部分。
如果同步代码是在服务器开始服务请求之后,那么是的,它会在同步代码运行时阻止处理其他请求,这将是一件不受欢迎的事情,因为它会显着降低您的可扩展性和响应能力服务器。
关于javascript - Node.js 中的单线程到底是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57125283/