进程模型--nginx

1、初始化
ssl
数据结构
   时间,log,crc表,
系统检测,设置handler和获取系统信息(如cpu,rlimit),random初始化
如果是新bin的子进程,接管父进程的socket等信息

pid file

信号量处理
     忽略
         SIGSYS
         SIGPIPE
         SIGIO
     退出
         SIGQUIT
     结束
         SIGINT
         SIGTERM
     刷新配置
         SIGHUP
     重新打开日志
         SIGUSR1
     结束Accept
         SIGWINCH
     升级nginx/退出重新启动
         SIGXCPU
     定时器
         SIGALRM //用于退出,如果超过1秒不退出,就对子进程发KILL信号,否则发TERM
     重启子进程
         SIGCHLD           ///忽略SIGCHLD信号,常作为提高并发服务器性能的一个技巧。因为并发服务器可能fork很多子进程,子进程终结后需要服务器进程wait子进程并清理资源。如果将该信号忽略,可使内核把僵尸子进程交给init进程处理,节省大量僵尸子进程占用的系统资源。


2、Master处理
    初始化信号量
    启动工作进程

    启动缓存管理进程 

    进入主循环等待信号,对信号量的进行调用相应的控制动作
    

3. 子进程处理
    初始化
        读配置
        sertrlimit
        切换用户
        设置CPU亲缘性
        模块初始化
        通知通道初始化
            父对子进程的命令控制通过socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel)的socket
        setproctitle
    线程初始化
        主循环
                cond_wait(ngx_posted_events_mutex)
                ngx_event_thread_process_posted
    子进程进入主循环        
        对控制标志位对线程进行相应控制动作
        ngx_process_events_and_timers
            ngx_accept_mutex
            ngx_event_process_posted(cycle, &ngx_posted_accept_events);
              if (ngx_threaded) {
            ngx_wakeup_worker_thread(cycle);

        } else {
            ngx_event_process_posted(cycle, &ngx_posted_events);

        }


PS:

Nginx和apache一样,通过mutex保证只有一个子进程在accept。

而lighttpd多个子进程都会去监听,有惊群现象(EAGAIN),但是对性能影响不大


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值