Nginx的进程

传统上基于进程或线程模型架构的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)缓存

主要完成以下工做:网络

  1. 读取并验正配置信息;
  2. 建立、绑定及关闭套接字;
  3. 启动、终止及维护worker进程的个数;
  4. 无须停止服务而从新配置工做特性;
  5. 控制非中断式程序升级,启用新的二进制程序并在须要时回滚至老版本;
  6. 从新打开日志文件,实现日志滚动;
  7. 编译嵌入式perl脚本;

 

2.工做进程(Worker Process)架构

  1. 接收、传入并处理来自客户端的链接;
  2. 提供反向代理及过滤功能;
  3. nginx任何能完成的其它任务;

 

3.缓存索引重建及进程管理(Cache Loader & Cache Manager)并发

Cache模块,主要由缓存索引重建(Cache Loader)和缓存索引管理(Cache Manager)两类进程完成工做。缓存索引重建进程是在Nginx服务启动一段时间以后(默认是1分钟)由主进程生成,在缓存元数据重建完成后就自动退出;缓存索引管理进程通常存在于主进程的整个生命周期,负责对缓存索引进行管理。异步

cache loader进程主要完成的任务包括:模块化

  1. 检查缓存存储中的缓存对象;
  2. 使用缓存元数据创建内存数据库;

cache manager进程的主要任务:oop

  1. 缓存的失效及过时检验;
相关文章
相关标签/搜索