You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express多并发请求疑问:同路由能否同时响应多用户请求?

关于Express路由并发请求的问题解答

好问题!其实这里的核心是要理解Node.js和Express的非阻塞异步模型,我来给你拆解清楚:

核心逻辑:Node.js的异步I/O不会阻塞主线程

Node.js的主线程负责处理事件循环,但像数据库查询这类I/O操作,会被交给底层的线程池去执行,主线程不会一直等待操作完成,而是会立刻释放去处理下一个任务(比如新的用户请求)。

你的代码不会阻塞并发请求

看你写的这段代码:

router.get('/', (req, res, next) => { 
  pool.query("select * from users").then((data) => { 
    setTimeout(() => { 
      res.json(data.rows); 
    }, 5000); 
  }).catch((err) => { 
    res.json({ error: err }); 
  }); 
});

当第一个请求进来时,主线程执行到pool.query后,就会把数据库查询的任务交给线程池,然后立刻回到事件循环中。这时候如果有第二个用户请求这个路由,Express会马上处理第二个请求的回调函数,同样发起数据库查询——这两个查询是并行执行的,互不干扰。

哪怕数据库查询耗时超出预期(比如卡了十几秒),或者setTimeout延迟5秒返回响应,这些都不会阻塞主线程:

  • pool.query的回调是在数据库查询完成后,被放入事件循环队列等待主线程处理;
  • setTimeout的回调也是在指定时间后进入队列,主线程只会在空闲时执行这些回调。

只有同步耗时操作才会阻塞

只有当你的代码里出现同步的长时间操作(比如while(true)死循环、同步读取超大文件)时,主线程才会被占用,导致新的请求无法被处理。但你的代码里全是异步操作,完全不存在这个问题。


结论:其他用户完全可以同时请求该路由,每个请求的处理都是独立的,不会互相阻塞。

内容的提问来源于stack exchange,提问作者Diego Barreto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:22:36