传统上基于进程或线程模型架构的web服务经过每进程或每线程处理并发链接请求,这势必会在网络和I/O操做时产生阻塞,其另外一个必然结果则是对内存或CPU的利用率低下。生成一个新的进程/线程须要事先备好其运行时环境,这包括为其分配堆内存和栈内存,以及为其建立新的执行上下文等。这些操做都须要占用CPU,并且过多的进程/线程还会带来线程抖动或频繁的上下文切换,系统性能也会由此进一步降低。nginx
在设计的最初阶段,nginx的主要着眼点就是其高性能以及对物理计算资源的高密度利用,所以其采用了不一样的架构模型。受启发于多种操做系统设计中基于“事件”的高级处理机制,nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。在nginx中,链接请求由为数很少的几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每一个worker能够并行处理数千个的并发链接及请求。
若是负载以CPU密集型应用为主,如SSL或压缩应用,则worker数应与CPU数相同;若是负载以IO密集型为主,如响应大量内容给客户端,则worker数应该为CPU个数的1.5或2倍。web
Nginx会按需同时运行多个进程:一个主进程(master)和几个工做进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。全部进程均是仅含有一个线程,并主要经过“共享内存”的机制实现进程间通讯。主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。数据库
1.主进程(Master Process)缓存
主要完成以下工做:网络
2.工做进程(Worker Process)架构
3.缓存索引重建及进程管理(Cache Loader & Cache Manager)并发
Cache模块,主要由缓存索引重建(Cache Loader)和缓存索引管理(Cache Manager)两类进程完成工做。缓存索引重建进程是在Nginx服务启动一段时间以后(默认是1分钟)由主进程生成,在缓存元数据重建完成后就自动退出;缓存索引管理进程通常存在于主进程的整个生命周期,负责对缓存索引进行管理。异步
cache loader进程主要完成的任务包括:模块化
cache manager进程的主要任务:oop