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

标签 javascript node.js multithreading

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

假设我只有一个非常简单的应用程序来向客户端响应“Hello World”文本,它仍然需要时间来完成执行,不管它有多快。如果同时有两个请求进来怎么办,Node.js如何确保两个请求都用一个线程处理?

我阅读了博客 Understanding the node.js event loop上面写着“当然,在后端,有用于数据库访问和进程执行的线程和进程”。该声明是关于 IO 的,但我也想知道是否有单独的线程来处理请求队列。如果是这样的话,我能说 Node.js 单线程的概念只适用于在 Node.js 上构建应用的开发者,而 Node.js 实际上是在后台运行在多线程上的吗?

最佳答案

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

如果您在 *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

关于javascript - Node.js 如何用一个线程处理并发请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220878/

相关文章:

javascript - 将 url slug 添加到 Next Js 路由获取 TypeError 路径应该是类型字符串获取类型对象

javascript - 如何从nodeJS中的页面调用文件

python - 如何在Python中同时启动线程

ios - 如何在iOS中运行相互依赖的长时间运行任务

java - 使用线程安全对 concurrentHashMap 进行排序

javascript - 表操作

javascript - onclick 事件不适用于选项

javascript - 钛移动开发平台

node.js - Node js 聊天服务器 - 用户身份验证

javascript - 滚动到 div 然后将其固定到页面顶部