美文网首页
惊群效应理解

惊群效应理解

作者: wenfh2020 | 来源:发表于2019-09-25 15:03 被阅读0次

惊群:

多个进程或者线程阻塞等待同一个事件,当事件到来,多线程或者多进程同时被唤醒,只有一个线程或进程获得资源。

通俗点说,往鸡群里仍一颗稻谷,鸡群争抢,只有一个成功,其它失败。


现象:

火焰图观察 accept,或者用 strace 命令观察底层调用。


结果:

线程或进程频繁切换,会导致系统资源损耗。


解决方案:

1、代码同步加锁(参考 nginx 源码)。

2、设置 socket 属性 SO_REUSEPORT (Linux 系统内核层面解决,这个方案简单,参考 nginx 这个属性设置)


原理:

当用 epoll 事件处理高并发事件模型时候,多个进程或线程 epoll_wait 会阻塞等待网络事件,当有新的 client connect 进来,epoll_wait 会同时被会唤醒争抢这个链接资源,然后调用 accept 处理,争抢资源失败的 accept 会返回 EAGAIN。


测试:

源码 server 是 epoll 事件模型,client 用 telnet 即可。


后记:

以上只是记录了些学习心得避免遗忘,参考了不少帖子(下面)。现在很多 linux 服务器项目不会直接用 epoll 模型了,因为有很多跨平台的开源解决方案可以选择:libev, libuv, libevent, 最近笔者换了 mbp 本子发现 epoll 竟然跑不起来,macOs 下是 kqueue,还好项目网络底层用的是 libev,安装一下,项目又能跑起来了,酸爽~。虽然这些开源项目都很不错,但是对一个有追求的码农,掌握它们运行原理还是很有必要的。 


参考:

一个epoll惊群导致的性能问题

Linux惊群效应详解

Linux 最新SO_REUSEPORT特性


更精彩内容,请关注我的博客:https://wenfh2020.com

相关文章

  • 惊群效应理解

    惊群: 多个进程或者线程阻塞等待同一个事件,当事件到来,多线程或者多进程同时被唤醒,只有一个线程或进程获得资源。 ...

  • nginx如何解决惊群效应

    本文主要内容包括惊群效应简介、nginx如何解决惊群和一个仿照nginx避免惊群效应的简单例子 惊群效应 惊群简单...

  • 惊群效应(转载)

    目录 高并发中的惊群效应 1.惊群效应简介 操作系统的惊群 惊群的坏处 3.1 坏处 3.2 其他 4 惊群的几种...

  • 惊群效应

    1. Linux惊群效应 多线程或多进程在同时阻塞等待一个事件而处于休眠态时,如果等待的事件发生,则去唤醒了所有的...

  • 网络编程"惊群"问题

    1、惊群效应(thundering herd) 什么是惊群效应惊群现象就是多进程(多线程)在同时阻塞等待同一个事件...

  • 关于惊群效应

    什么是惊群,这篇文章写的很好:举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所...

  • nginx的惊群效应

    什么是惊群效应:惊群效应(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠...

  • 关于accept mutex获取的方式

    问题背景 在多进程accept的时候,为了避免惊群效应浪费资源,nginx加了一个accept mutex,但是获...

  • 量子反常霍尔效应

    记:多数人对量子反常霍尔效应不太明白。薛:要理解量子反常霍尔效应,你得先理解量子霍尔效应,要理解量子霍尔效应,你得...

  • 群效应

    坚持了半个月5点半左右起床,阅读、日更、亲子英语10页的背诵、每日运动半个小时,这些任务也坚持半个月基本每天都完成...

网友评论

      本文标题:惊群效应理解

      本文链接:https://www.haomeiwen.com/subject/zcnsuctx.html