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

Din*_* Tw 9 javascript multithreading node.js

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

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

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

Mic*_*ael 9

操作系统为每个套接字连接提供发送和接收队列.这是字节位置,直到应用程序层的某些东西处理它们.如果接收队列填满,则没有连接的客户端可以发送信息,直到队列中有可用空间.这就是应用程序应该尽快处理请求的原因.

如果您使用的是*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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)