我理解Node.js如何使用单线程。大多数情况下,它使用异步方法/模块,以尽可能地保持主运行时线程的自由。
但是,一些异步模块在内部使用线程来完成它们的工作。例如,读取文件或其他高密集型CPU任务。这是在后台完成的,它是为Node开发人员提取的。
我的问题是,内部Socket.IO如何工作,是否使用上述示例中的线程?它是否每个连接使用单独的线程?如果是这样,如果我们有1000个连接的客户端,这是否意味着我们将拥有1000个线程?
答案 0 :(得分:2)
节点不使用线程池(或单独的线程)作为套接字,而是使用任何特定于平台的机制来轮询数据套接字(例如Linux上的epoll,OS X上的kqueue(IIRC),I / O完成端口在主要线程上的Windows等。
答案 1 :(得分:-2)
Socket.io像大多数节点应用程序一样在事件循环上工作。没有棘手的线程业务AFAIK。您可以在此处查看来源:https://github.com/Automattic/socket.io