Javascript Node.js如何用一个线程处理并发请求?

Javascript Node.js如何用一个线程处理并发请求?,javascript,node.js,multithreading,Javascript,Node.js,Multithreading,我对这个问题做了一些研究,但人们似乎只强调非阻塞IO 比方说,如果我有一个非常简单的应用程序来向客户机响应“Hello World”文本,那么它仍然需要时间来完成执行,不管它有多快。如果有两个请求同时传入,Node.js如何确保用一个线程处理这两个请求 我读了一篇博客,上面说“当然,在后端,有用于DB访问和进程执行的线程和进程”。该语句是关于IO的,但我也不知道是否有单独的线程来处理请求队列。如果是这样的话,我可以说Node.js单线程概念只适用于在Node.js上构建应用程序的开发人员,但是N

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

比方说,如果我有一个非常简单的应用程序来向客户机响应“Hello World”文本,那么它仍然需要时间来完成执行,不管它有多快。如果有两个请求同时传入,Node.js如何确保用一个线程处理这两个请求


我读了一篇博客,上面说“当然,在后端,有用于DB访问和进程执行的线程和进程”。该语句是关于IO的,但我也不知道是否有单独的线程来处理请求队列。如果是这样的话,我可以说Node.js单线程概念只适用于在Node.js上构建应用程序的开发人员,但是Node.js实际上是在后台多线程上运行的吗?

操作系统为每个套接字连接提供了一个发送和接收队列。这就是字节所在的位置,直到应用层有人处理它们。如果接收队列已满,则在队列中有可用空间之前,连接的客户端无法发送信息。这就是为什么应用程序应该尽可能快地处理请求

如果您使用的是*nix系统,则可以使用netstat查看发送和接收队列中的当前字节数。在本例中,接收队列中有0个字节,发送队列中有240个字节(等待操作系统发送)

在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

所以你是说Node.js在操作系统上回复请求队列,它没有自己的实现来处理队列,对吗?是的,Node.js没有什么神奇之处,就像其他应用程序一样,它依赖操作系统来处理网络层。我仍然感到困惑。我刚刚从Node的页面上读到了
,这与今天更常见的并发模型形成了对比,后者使用操作系统线程。似乎Nodejs没有使用OS线程,我不确定我是否理解正确。他们在这里讨论单线程与每个连接的线程。如果您担心多个请求同时出现,那么您将转到网络层。让操作系统来担心这一点。请注意“在node.js中,除了代码之外,所有东西都并行运行”。您的代码在单线程中运行,但事件在幕后由多个线程处理。@BibekSubedi,I google
在node.js中,除了您的代码之外,所有东西都并行运行,这有助于澄清一些混淆,谢谢。
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