我对此问题进行了一些搜索,但似乎人们只强调非阻塞IO。
假设如果我只有一个非常简单的应用程序来向客户端响应“ Hello World”文本,那么不管它有多快,它仍然需要时间来完成执行。如果有两个请求完全同时出现,该怎么办,Node.js如何确保两个请求都将被一个线程处理?
我读了一篇了解node.js事件循环的博客,其中说:“当然,在后端,有用于DB访问和执行过程的线程和过程”。该语句与IO有关,但我也想知道是否有单独的线程来处理请求队列。如果是这样,我可以说Node.js单线程概念仅适用于在Node.js上构建应用程序的开发人员,但是Node.js实际上是在幕后的多线程上运行的吗?
操作系统为每个套接字连接分配一个发送和接收队列。这就是字节所在的位置,直到应用程序层的某些内容处理它们为止。如果接收队列已满,则在队列中没有可用空间之前,所有已连接的客户端都无法发送信息。这就是应用程序应尽快处理请求的原因。
如果您使用的是* nix系统,则可以使用netstat查看发送和接收队列中的当前字节数。在此示例中,接收队列中有0个字节,发送队列中有240个字节(等待OS发出)。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句