最近在翻译nginx的官方文档,目前刚刚开始modole reference部分,今天来简单的分析一下core functionality中的第一个指令:'accept_mutex'。
对于这个指令,官方文档中给出的定义是这样的:
如果生效了'accept_mutex'指令,工作进程会轮流地接受新的连接。否则,所有的工作进程都会得到这个连接的通知,如果连接数量很低,一些
(空闲的)工作进程就会无意义地消耗系统资源(cpu)。
在一些支持'epoll'方法或使用'reuseport'的系统中无需启用'accept_mutex'。
nginx 1.11.3以上的版本,'accept_mutex'指令的默认值为'on'。
顾名思义,accept mutex的意思为接收互斥量(翻译的很粗暴)。
惊群问题:当你向一群鸽子仍一块食物的时候,所有鸽子都会被惊动,来争抢这块食物,最后只有一只鸽子吃到食物,其他鸽子回去继续睡觉,等待
下一块食物的到来,这样每仍一块食物,所有的鸽子都会被惊醒。就好比java中的多线程去共享同一个资源。为了确保线程安全(当多个线程访问同一个资源(类,对象或方法)时,这个资源始终能表现出一个正确的行为,那么这个资源就是线程安全的)。最简单的方法就是通过给这个资源(可以抽象为一个对象或一个代码块)加锁(synchronized)。因为锁语句产生了一种互相排斥的效果,这种机制常常被称为“互斥量”。以相同的思想再去理解这个'accept_mutex'。
本人处在自学阶段,参考了一些前辈的博客,并查询了相关的概念:
参考博客1:http://huoding.com/2013/08/24/281;