nginx源码学习,第一节,一些准备

结构

master进程父进程1,
worker进程的父进程,master进程,fork()
一个master多个master
如下图:
第一个是用户,第二个是进程UUID,第三个是父进程id,之后还可以看到进程名字,如master processworker process
通过进程id和父进程id可以看到,worker process父进程都是master进程
nginx源码学习,第一节,一些准备

进程模型

master进程,监控进程,不处理具体逻辑,专门管理worker进程
worker用来处理具体逻辑
查看进程:
ps -ef | grep nginx

通信方法

master与worker进程之间的通信,方法:信号,共享内存

稳定性

如果worker进程死掉一个,master会立即按照配置文件,启动新的worker进程
是worker进程数量保持在配置文件中指定的
例如杀死一个worker进程,自动增加一个
kill processId
效果如下:
nginx源码学习,第一节,一些准备

  • 几个进程数量合适?
    多核cpu,每个worker进程单独占一个内核(processor),让cpu尽量少的切换
    查看processor的数量: grep -c processor /proc/cpuinfo
    给nginx配置worker进程的数量
    首先要把nginx注册进去才能进行关闭
    nginx/conf/nginx.conf设置worker 为4
    nginx源码学习,第一节,一些准备

nginx灵活性:

nginx的命令:
查找:./nginx -?
nginx源码学习,第一节,一些准备
例子:
1、动态重新加载conf文件,这样就是在不关闭nginx时就直接更改
./nginx -s reload
2、热升级,热回滚

结束nginx
1、杀master进程
2、./nginx -s quit(正常关闭)/stop(简单粗暴)

nginx是多进程模型,不是多线程

多线程是内存共享的,一个进程出错,其他的一定会受影响
多进程

  • linux的使用命令方式,
    systemctl stop/start/restart serviceName

  • nginx源码,c语言写的,nginx/src里面,每一个文件夹看名字就可以区分不同的模块儿

  • 搜索main函数,这是入口函数