javascript - Node.js 中的单线程到底是如何工作的?

标签 javascript node.js

我目前正在详细了解 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/

相关文章:

javascript - 注入(inject)的 HTML 仅在 Dom 中解释为字符串

javascript - 如何使用 Nexmo 建立多个 WebSocket 连接

python - Django REST vs Express JS,我应该选择哪一个来构建 REST API?

javascript - 如何更改文本区域中闪烁的光标/插入符号

javascript - 警报未显示 react js中的更新状态?

javascript - backbone.js:可以将 <script type="text/template> 内容推送到外部文件

javascript - 使用 aspnetmvc Turbolinks 时如何在正文中编写 jquery

javascript - 在 for 循环内发出 GET 请求

node.js - 是否可以将模板的某些部分放入其他文件中?

node.js - Express - POST 请求挂起