2

我只是在学习 Node.js 并且对(至少)一件事感到困惑。似乎 Node.js 可以为上传或下载大文件的多个请求提供服务。每个请求可能需要几分钟才能完成。为什么在处理这些请求之一时事件循环没有被冻结?

-布赖恩

4

1 回答 1

2

在 Node.js 中,即使您只在单个线程上工作,在操作系统级别它也使用异步非阻塞事件。这意味着写入/读取缓冲区的任务与来自其他连接的其他事件多路复用。

如果您注意到 IncomingMessage 实现了 ReadbleStream http://nodejs.org/api/http.html#http_http_incomingmessage

那是因为它不会一次读取所有数据,而是读取块。HTTP 请求中的每个数据块都将作为您必须处理的事件发送给您。

事件循环未冻结,因为从文件或套接字异步读取是操作系统提供的服务。您告诉操作系统您要读取一个文件,并且您可以不时检查 bean 从该文件读取了多少字节,或者整个文件是否已读取 bean(加载到内存中)。这些异步函数是由操作系统提供的,因为读取文件或从套接字读取通常比从 RAM 或缓存​​读取要慢。因此,当您的进程继续执行其他任务时,操作系统将有一个负责读取的线程。

于 2013-06-24T18:08:52.670 回答