Node.js如何处理一个线程的同时请求?

时间:2015-03-23 21:36:28

标签: javascript node.js multithreading

我对这个问题进行了一些搜索,但似乎人们只强调非阻塞IO。

如果我只是有一个非常简单的应用来响应" Hello World"文本到客户端,无论多快,它仍然需要时间来完成执行。如果有两个请求在同一时间进入怎么办,Node.js如何确保两个请求都将在一个线程中处理?

我阅读了博客Understanding the node.js event loop,其中说的是#34;当然,在后端,有用于数据库访问和流程执行的线程和流程"。该声明与IO有关,但我也想知道是否有单独的线程来处理请求队列。如果是这样,我可以说Node.js单线程概念只适用于在Node.js上构建应用程序的开发人员,但Node.js实际上是在场景后面的多线程上运行吗?

1 个答案:

答案 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