我对这个问题进行了一些搜索,但似乎人们只强调非阻塞 IO。
假设我只有一个非常简单的应用程序来向客户端响应“Hello World”文本,它仍然需要时间来完成执行,不管它有多快。如果同时有两个请求进来怎么办,Node.js如何确保两个请求都用一个线程处理?
我阅读了博客 Understanding the node.js event loop上面写着“当然,在后端,有用于数据库访问和进程执行的线程和进程”。该声明是关于 IO 的,但我也想知道是否有单独的线程来处理请求队列。如果是这样的话,我能说 Node.js 单线程的概念只适用于在 Node.js 上构建应用的开发者,而 Node.js 实际上是在后台运行在多线程上的吗?
最佳答案
操作系统给每个套接字连接一个发送和接收队列。这就是字节所在的位置,直到应用层的某些东西处理它们。如果接收队列已满,则在队列中有可用空间之前,没有连接的客户端可以发送信息。这就是为什么应用程序应该尽可能快地处理请求。
如果您在 *nix 系统上,您可以使用 netstat 查看发送和接收队列中的当前字节数。在本例中,接收队列中有 0 个字节,发送队列中有 240 个字节(等待操作系统发送出去)。
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 240 x.x.x.x:22 x.x.x.x:* LISTEN
在 Linux 上,您可以使用 proc 文件系统检查发送/接收队列的默认大小和最大允许大小:
Receive:
cat /proc/sys/net/core/rmem_default
cat /proc/sys/net/core/rmem_max
Send:
cat /proc/sys/net/core/wmem_max
cat /proc/sys/net/core/wmem_default
关于javascript - Node.js 如何用一个线程处理并发请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220878/