老师,worker抢占机制,涉及到多个worker的锁竞争,应该影响性能才对啊,为啥还能提高性能呢?

来源:1-9 Nginx处理Web请求机制解析

慕设计7465963

2019-12-10 12:55:52

如题。。。

写回答

2回答

慕侠5591593

2020-04-10

我觉得这个可以这么理解:

要了解worker抢占机制就要先明白一个名词‘惊群问题’

惊群问题是指在多线程(或多进程)场景下,有多个线程在等待某一资源可用,一旦这个资源可用,那么所有等待这个资源的线程都会被唤醒,但是资源只有一份,那么只有一个线程获得这个资源,其它线程都获取失败

惊群问题导致了不必要的线程唤醒,实际上只有一个线程能获取这份资源,那么理想情况下只唤醒一个线程就行了。而唤醒多个线程导致了不必要的线程调度,造成系统开销


而Nginx为了避免惊群问题,就有了accept_mutex这个锁,在Nginx默认下是开启的,当accept_mutex开启后,任意时刻只有一个进程能获得accept_mutex锁,获得accept_mutex锁的进程能监听web端口;无法获得accept_mutex锁的进程会把监听套接字从其epoll中删除


4

Java架构师讲师团

2019-12-10

可以说他们是共享内存的

0
hheobeee
h worker是独立的进程,进程与进程之间共享什么内存?
h020-02-23
共2条回复

Java架构师-技术专家

千万级电商项目从0到100全过程,覆盖Java程序员不同成长阶段的核心问题与解决方案

2672 学习 · 5839 问题

查看课程