0

swoole高并发如何实现?

我看过相关的文档, master进程里的reactor线程是io复用的, 异步非阻塞, 这边并发量不会是问题, 问题是 reactor线程 将数据 发给worker进程, 虽然 reactor可以处理高并发, 但是worker线程不可以, 这边应该会成为瓶颈? 一个worker 同一个时刻只能处理一个连接请求? 假设一个请求100ms, 一个worker也就10qps, 这样是如何实现高并发的呢

2019-06-13 提问
2 个回答
0
  1. 你说的是阻塞模型下的worker,是这么计算,上个请求没处理完时下一个请求无法处理。
  2. 如果是非阻塞IO的情况下,接收请求后放入epoll中,就去处理下一个请求了。如果当前请求处理完毕,通过response对象发送响应结束处理。
0

比如你有一个接口,这个接口去查数据库,返回结果需要一定时间,如需要100ms返回结果

这时候有两个请求进来

先处理第一个请求,与数据库通信,告诉数据库你要查询的语句,在等待返回数据这100ms期间协程挂起

这时候开始处理第二个请求,同样的等待数据库返回结果前,这第二个协程也是挂起的

哪一个请求的数据库返回结果先回,那就继续执行那个协程


这种I/O密集型场景,协程非常合适

撰写答案

推广链接