惊群现象

今天再看nginx架构发现了它也存在惊群现象,之前师兄的socks5代理服务器同样存在着惊群现象。

惊群(thundering herd)是指,只有一个子进程能获得连接,但所有N个子进程却都被唤醒了,这种情况将使性能受损。


惊群现象_第1张图片

nginx架构如上图所示,每个worker都是从master fork过来,在master里先建立好需listen的socket之后,然后fork出多个work进程,这样每个work都可以去accept这个socket(当然不是同一个socket,只是每个work进程中的这个socket会listen同一个ip和端口)来的链接。当一个连接进来后,所有在work进程都会收到通知,但只有一个work可以accept这个连接,其他的则accept失败。

之前看过的socks5代理服务器也是类似,bind-listen后fork多个进程,每个进程单独accept循环,这也是之前性能上不去的一个重要原因,而且随着fork数增多,性能恶化加剧。


解决方法:记得之前看unix网络编程时说在各进程accept前加锁可以避免惊群

你可能感兴趣的:(服务器开发)