多进程为什么不是把请求交给空闲进程?而是针对于某个客户端固定了一个进程处理?

秦旭凯

我用浏览器请求,一直是给第一个进程处理,哪怕这个进程阻塞着
postman一直是第二个进程
有设置调度的吗?把新的请求交给空闲进程?

2219 1 0
1个回答

six

因为浏览器(包括postman)会做优化啊,浏览器新的请求复用之前建立的http连接。目的是避免频繁的tcp连接建立和断开,大大提升浏览器和服务端性能
 
如果满足下面情况就会复用连接发起新的请求,
1、连接没有被关闭
2、连接上没有等待响应的请求,也就是上一个请求已经收到回复
 
浏览器是不知道你的进程发生了阻塞的,既然这个连接正常返回了数据,它认为连接对应的进程没问题,那么下次他还会复用这个连接发起请求。
 
服务端无法把请求分配给其它进程是因为根据操作系统的底层原理,客户端发起的连接不是进程间共享的,连接属于哪个进程那么就只能那个进程处理。如果处理连接的进程被你sleep阻塞了,那它自然暂时无法处理这个连接后续的请求啦,其它进程帮不上忙的。
 
我觉得如果不想他们复用连接,可以send完数据后调用close关闭连接

  • 暂无评论
年代过于久远,无法发表回答
🔝