惊群会造成一点资源的浪费,只要经过简单的处理,不会导致任何业务异常。workerman中多个进程/线程尝试去获取客户端链接时,如果发现链接已经被其它进程/线程认领,就什么也不做,没有任何影响。
惊群
简单的说 某个事件发生后,会唤醒多个正在等待该事件的进程/线程,造成一定的cpu资源的浪费
就像一个客人进餐馆吃饭(代表一个客户端链接到来),这时一些休息的服务生(接受链接的进程)看到客人来了赶紧起来去招呼客人,但是一个客人一个服务生就够了,其它服务生看到客人已经被一个服务生抢先认领了,没自己的事情了就又回去休息,造成浪费。
解决办法
通常是通过锁机制等,在任意时刻只让一个进程/线程去接受客户端链接。但是锁机制也会造成cpu等资源的消耗及性能损耗,比起惊群的消耗谁大谁小目前没有一个定论。
目前一些常见的服务器软件有的是通过锁机制来解决惊群的,比如nginx(nginx锁机制默认是开启的,可以关闭);还有一些认为惊群对系统影响不大,没有去处理,比如lighttpd。而apache一般没有惊群效应,apache的进程模型是多个进程阻塞在accept上,目前的Linux内核已经解决了accpet惊群问题(经过本人实际测试确实如此)。