美文网首页
nginx的惊群效应

nginx的惊群效应

作者: daos | 来源:发表于2020-02-15 11:16 被阅读0次

什么是惊群效应:
惊群效应(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群效应。

惊群效应消耗了什么?

Linux内核对用户进程(线程)频繁地做无效的调度、上下文切换等使系统性能大打折扣。上下文切换(context switch)过高会导致cpu像个搬运工,频繁地在寄存器和运行队列之间奔波,更多的时间花在了进程(线程)切换,而不是在真正工作的进程(线程)上面。直接的消耗包括cpu寄存器要保存和加载(例如程序计数器)、系统调度器的代码需要执行。间接的消耗在于多核cache之间的共享数据。

为了确保只有一个进程(线程)得到资源,需要对资源操作进行加锁保护,加大了系统的开销。目前一些常见的服务器软件有的是通过锁机制解决的,比如Nginx(它的锁机制是默认开启的,可以关闭);还有些认为惊群对系统性能影响不大,没有去处理,比如lighttpd。
首先我们要知道在用户空间进程间锁实现的原理,起始原理很简单,就是能弄一个让所有进程共享的东西,比如mmap的内存,比如文件,然后通过这个东西来控制进程的互斥。

nginx中使用的锁是自己来实现的,这里锁的实现分为两种情况,一种是支持原子操作的情况,也就是由NGX_HAVE_ATOMIC_OPS这个宏来进行控制的,一种是不支持原子操作,这是是使用文件锁来实现。

参考:
https://www.jianshu.com/p/6f8ad355fef8

相关文章

  • nginx如何解决惊群效应

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

  • nginx的惊群效应

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

  • 惊群效应(转载)

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

  • 关于accept mutex获取的方式

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

  • 惊群效应

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

  • 网络编程"惊群"问题

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

  • 关于惊群效应

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

  • 惊群效应理解

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

  • Linux惊群效应之Nginx解决方案

    前言 因为项目涉及到Nginx一些公共模块的使用,而且也想对惊群效应有个深入的了解,在整理了网上资料以及实践后,记...

  • Epoll之惊群

    惊群可以参考:“惊群”,看看nginx是怎么解决它的 1. 什么是惊群: 多线程/多进程(linux下线程进程也没...

网友评论

      本文标题:nginx的惊群效应

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