所以我的理解是 Node.js 将阻塞操作卸载到线程池,例如文件系统访问、加密、压缩等。
我的问题是,我们运行数据库查询来获取或更新数据的http调用怎么样?这些调用是否也委托给线程池,因为它们正在等待,或者等待不会阻塞主事件循环?
如上所述这里
阻塞是指在 Node.js 中执行额外的 JavaScript 进程必须等到非 JavaScript 操作完成。这 发生的原因是事件循环无法继续运行 发生阻塞操作时的 JavaScript。
和
Node.js 标准库中的所有 I/O 方法都提供 异步版本,非阻塞,并接受回调 功能。有些方法也有阻塞对应的方法,其中有 以 Sync 结尾的名称。
所以这取决于您使用的是阻塞
sync
方法还是非阻塞 async
。
另外,对于与数据库 I/O 相关的问题,如果您选择非阻塞 I/O 方法,它不会像这里提到的那样阻塞主事件循环
作为一个例子,让我们考虑这样一种情况:每个对网络的请求 服务器需要 50 毫秒才能完成,其中 50 毫秒中有 45 毫秒是数据库 I/O 这可以异步完成。选择非阻塞异步 每个请求释放 45 毫秒的操作来处理其他请求。 仅通过选择使用,容量就存在显着差异 非阻塞方法而不是阻塞方法。