为什么nginx并发能力强
多进程模型
nginx服务启动时,会自动创建一个master进程和多个worker进程,worder进程的数量依赖与nginx的配置,一般是cpu的核数,过 多的worker进程带来cpu的资源竞争和上下文切换。master进程负责创建和管理worker进程,除此之外master进程还负责nginx配 置解析、信号管理、模块注册等工作。worker进程负责接收和处理客户端的请求,worker进程才是nginx服务的主体。
异步非阻塞
worker进程采用异步非阻塞的方式对外提供服务。具体来说就是,workder进程在处理客户端请求时会进行IO调用,如果调用不能立即 得到响应,worker进程也不会一直等待,而是转去处理其他客户端请求。当IO调用有结果时会主动通知worker进程,worker进程得到通知便会 暂停手上的工作,来处理IO调用的返回结果。
事件驱动模型
IO调用完成后如何主动通知worker进程,靠的就是事件驱动模型,事件驱动模型提供了一种机制,使得worker进程不用关心IO调用的状态,IO调 用完全由事件驱动模型来管理,事件准备好后就通知worker进程事件已经就绪。事件驱动模型由事件收集器、事件发送器、事件处理器构成。事件发送器每发 送一个请求,目标对象就将其放入待处理的事件列表,然后使用非阻塞IO方式调用事件处理器来对该事件进行处理。 这个过程离不开事件驱动处理库,也叫多路IO复用方法,常见的有select模型、poll模型、epoll模型。