javascript - Node.js 中的单线程究竟是如何工作的?
问题描述
我目前正在详细阅读 Node.js 如何在幕后工作。我的问题是关于它的单线程架构和事件循环。我已经熟悉其中的大部分内容,但有一件事让我感到困惑。一位在线讲师说,如果在“顶级”代码中,调用重的同步函数是可以的。我知道它甚至在事件循环开始之前就运行了,但它是否仍然阻止其他用户,因为它在单线程上?
解决方案
作为服务器启动的一部分运行同步操作是很常见的,这完全没问题。事实上,如果你在服务器启动中不使用同步操作,启动代码可能要复杂得多。
例如,require()
操作是同步的和阻塞的。所以,是的,在代码的服务器启动部分使用同步代码是完全可以的。
但是,一旦你的服务器启动了,fs.readFileSync()
在任何类型的请求处理程序中使用同步 I/O 代码都会破坏服务器的可伸缩性。
我知道它甚至在事件循环开始之前就运行了,但它是否仍然阻止其他用户,因为它在单线程上?
如果同步代码在服务器开始服务请求之前,那么还没有其他用户阻塞。它只是让服务器运行的代码的一部分。
如果同步代码是在服务器开始服务请求之后,那么是的,它会在同步代码运行时阻止其他请求被处理,这将是一件不受欢迎的事情,因为它会显着降低服务器的可伸缩性和响应能力。
推荐阅读
- c - 为什么多线程更慢?
- c++ - 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- android - Android Pie:以编程方式启用“自动记录所有通话”
- bandwidth - 在 Windows 10 上使用 IIS 10 进行 Dash 播放的比特率限制
- function - Octave:在函数内部使用匿名函数
- alloy - 有没有办法在实例化后为抽象属性分配签名?
- html - 如何在 CSS 中生成纯色渐变样式?
- python - 如何在seaborn countplot上只为一个箱子着色?
- groovy - Groovy - 如何修剪数组中每个元素的空格
- audio - FFMPEG 视频到音频的转换结果在不同的持续时间