node.js 每个套接字连接是否使用线程?

Does node.js use thread per socket connection?

我了解 Node.js 如何使用单线程。大多数情况下,它使用异步 methods/modules 以尽可能保持主运行时线程空闲。

但是,一些异步模块在内部使用线程来完成它们的工作。例如读取文件或其他高强度 CPU 任务。这是在后台完成的,并且是为 Node 开发人员抽象的。

我的问题是,Socket.IO 内部是如何工作的,它是否像上面的示例那样使用线程?每个连接是否使用单独的线程?如果是这样,是否意味着如果我们有 1000 个连接的客户端,我们将有 1000 个线程?

Socket.io 像大多数节点应用程序一样在事件循环中工作。没有棘手的线程业务 AFAIK。您可以在此处自行查看来源:https://github.com/Automattic/socket.io

Node 不为套接字使用线程池(或单独的线程),而是使用任何特定于平台的机制来轮询套接字以获取数据(例如 Linux 上的 epoll,OS 上的 kqueue X (IIRC), I/O Windows 上的完成端口等)在主线程上。