高效原因

  1. I/O多路复用 epoll

    1. I/O多路复用
      1. I/O流需要进行文件处理的时候,会获取文件的文件描述符
      2. 如果文件描述符没有就绪,如果就绪,会通知 os 进行操作
      3. 上面的操作用一个线程就可以实现,复用的是同一个线程
    2. I/O多路复用实现
      1. select
        1. 监视的文件描述符数量存在限制 1024
        2. 线性扫描效率低下
      2. epoll
        1. 文件描述符就绪时,采用系统的回调函数将文件描述符放入,效率高
        2. 最大连接无限制
  2. cpu 亲和

    1. worker process 和 cpu 核心绑定
    2. 减少 cpu 的 cache miss
  3. sendfile

    1. 零拷贝,通过内核空间传输文件

      进程结构

      nginx.png

信号量

kill -l

  • 可以查看 | 名称 | 指令 | | —- | —- | | SIGCHID | -17 | | SIGQUIT(ctrl+z) | -3 | | SIGINT(ctrl+c,仅仅处理前台程序) | -2 | | SIGTERM(kill 指令默认发送该信号,可能会被忽略) | -15 | | SIGKILL | -9 | | SIGHUP | -1 | | SIGUSR1 | -10 | | SIGUSR2 | -12 | | SIGWINCH | -28 |

master process

  • 监控 worker 进程
    • worker 进程挂掉,会发送 SIGCHLD
  • 管理 worker 进程
  • 接收信号
    • SIGTERM,SIGINT
    • SIGQUIT
    • SIGHUP
    • SIGUSER1
    • SIGUSER2
    • SIGWINCH

worker process

  • 不推荐手动向其发送信号进行管理
  • 接收信号
    • SIGTERM, SIGINT
    • SIGQUIT
    • SIGUSER1
    • SIGWINCH

命令行

  • reload
    • SIGHUP
  • reopen
    • SIGUSER1
  • stop
    • SIGTERM
  • quit
    • SIGSTOP