nginx模块化的设计哲学注定了nginx成为了一个轻量但功能可自定义的高性能的HTTP和反向代理以及邮件服务器。
要了解Nginx中epoll的应用,首先要了解nginx的请求处理机制
为了响应客户端或者对端服务器的请求,服务器一般需要拥有并行或者并发能力,即同时或者同时段可以响应客户端的请求,一般的做法有:
- 多进程
- 多线程
多进程的方式,缺点是进程数量过多的时候,内存等系统资源开销过大,可能会导致系统奔溃。
多线程的方式,缺点是线程间共享内存,得考虑线程安全的问题,还得考虑锁的问题。
nginx 进程模型
nginx 的进程模型选择的是多进程+异步非阻塞(epoll)
多进程指 一个master进程+多个worker进程(可配置,一般为内核数)+ cache manager进程+cache loader进程
异步非阻塞指worker进程的事件驱动模型采用的是epoll事件驱动库(多路io复用)的方式来和客户端交互。
nginx 进程启动流程
-> worker(n)
./nginx -c /etc/nginx.config ->master -> cache loader(初始化一次,然后关闭)
-> cache manager(缓存管理和清理)
master进程作用
信号处理、配置初始化、子进程生成管理通信
worker 任务
todo
cache loader
todo
master 和worker 通信
todo
worker 之间通信
channel 信道
worker 的异步非阻塞
异步非阻塞的事件处理机制也称为事件驱动模型有哪些
1.轮询
2.通知
衍生出事件驱动库也就是我们经常听的多路io复用
是select\poll\epoll、kqueue
本质: 单个进程监控多个文件描述符FD,一旦某个FD可读或者可写,则通知相应的进程进行读写操作
从网卡接收数据说起,需要明白的几个知识点
中断、CPU调度、进程上下文、调用栈、进程间通信、管道、共享内存、信号、信号量、ET、LT、IO、socket、fd、ip、端口 todo
网友评论