我对这个问题进行了一些搜索,但似乎人们只强调非阻塞IO。
如果我只是有一个非常简单的应用来响应" Hello World"文本到客户端,无论多快,它仍然需要时间来完成执行。如果有两个请求在同一时间进入怎么办,Node.js如何确保两个请求都将在一个线程中处理?
我阅读了博客Understanding the node.js event loop,其中说的是#34;当然,在后端,有用于数据库访问和流程执行的线程和流程"。该声明与IO有关,但我也想知道是否有单独的线程来处理请求队列。如果是这样,我可以说Node.js单线程概念只适用于在Node.js上构建应用程序的开发人员,但Node.js实际上是在场景后面的多线程上运行吗?
答案 0 :(得分:8)
操作系统为每个套接字连接提供发送和接收队列。这是字节位置,直到应用程序层的某些东西处理它们。如果接收队列填满,则没有连接的客户端可以发送信息,直到队列中有可用空间。这就是应用程序应该尽快处理请求的原因。
如果您使用的是* 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