Epoll的惊群效应

15 篇文章 0 订阅
12 篇文章 0 订阅

什么是惊群效应?

​ 在多线程或者多进程环境中使用Epoll来处理事件,每个线程 / 进程都同时监听着socket,那么当socket中的某个事件就绪后或者添加新的事件进去,操作系统就不知道应该将哪个线程 / 进程唤醒来处理此次事件,所以操作系统的处理方法就是同时唤醒多个线程 / 进程,可是此时必定只有一个线程/进程能够获得处理此次事件的权利,那么其他没有竞争到处理权限的线程 / 进程就会失败,错误码为EAGAIN。

惊群效应有什么危害?

  • 浪费系统的资源
  • 影响系统的性能

怎么处理惊群效应?

多线程

​采用master/worker线程模式,即只让其中一个线程(master线程)在epoll_wait监听socket,当有新的连接请求进来之后,由epoll_wait的线程调用accept,建立新的连接,然后交给其他线程(worker线程)处理后续的数据读写请求,这样就可以避免了由于多线程环境下的epoll_wait惊群效应问题。

多进程

​ nginx的解决思路:在同一时刻,永远都只有一个子进程在监听的socket上epoll_wait,其做法是,创建一个全局的pthread_mutex_t,在子进程进行epoll_wait前,则先获取锁。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值