https://github.com/wangcy6/nginx_1.9.2
https://www.kancloud.cn/digest/understandingnginx
http://tengine.taobao.org/book/
nginx接收一个请求后,不会等待这个请求的文件读取操作完成之后才接收下一个请求,它不会等待这个请求的后续的处理结果。而是会马上循环处理下一个请求(不阻塞)。请求的程序文件执行完成之后,会主动通知该线程,不用你主动去等待或者轮询查看(异步)。最后返回给客户端,它们是用回调这种方式进行 I/O,所以称为异步。 这个方式符合异步定义 看来异步实现方式很多种 单机支持10万以上的并发连接
进程模型
src\os\unix\ngx_process_cycle.c
#0 0x00007fe7561431a3 in __epoll_wait_nocancel () from /lib64/libc.so.6 #1 0x0000000000431a6f in ngx_epoll_process_events () #2 0x0000000000429772 in ngx_process_events_and_timers () #3 0x000000000042fff9 in ngx_worker_process_cycle () #4 0x000000000042e846 in ngx_spawn_process () #5 0x000000000042f3bb in ngx_start_worker_processes () #6 0x00000000004306f6 in ngx_master_process_cycle () #7 0x000000000040c785 in main ()
#0 0x00007fe75608c81a in sigsuspend () from /lib64/libc.so.6 #1 0x00000000004307f5 in ngx_master_process_cycle () #2 0x000000000040c785 in main ()
原子操作:ngx_spinlock方法是非常高效的自旋锁, 它充分考虑了单处理器和多处理器的系统,对于持有锁时间非常短的场景很有效率s
进程间通信机制
master进程与worker进程间
worker进程之间