项目--nginx高性能原因

epoll多路复用:

                                 java bio模型,阻塞进程式
                                linux select模型,变更触发轮训查找,有1024数量上限

                                
                                epoll模型,变更触发回调直接读取,理论上无上限

                                

 master-worker进程模型

                                          

nginx会启动一个master进行,会根据配置文件中的masterworker的数量,启动相应数量的worker进行,属于父子关系,通过linux c的系统调用fork方式,产生的主子进程的关系。

root      1835     1  0 10:51 ?        00:00:00 nginx: master process sbin/nginx -c conf/nginx.conf
nobody    6310  1835  0 15:21 ?        00:00:00 nginx: worker process

master进行可以管理worker进程的内存空间,measter内存有所有worker进程内存空间的内存变量,函数堆栈,socket的文件句柄。master进程管理worker进程,worker进程真正用于处理客户端链接。但启动master进程,会创建socket文件句柄,用于listen在80端口上,master会启动spoll多路复用进程。但客户端向80端口发送socket connect操作,epoll多路复用模型,发生回调,master进程不会处理请求的accept的操作,让对应的worker去处理accept操作(至于哪一个worker进程处理accept操作,nginx在内存中有一个互斥mutex,多个worker进程,回去抢占这个内存锁,谁先抢占到,就由谁处理)。一旦某一个worker进程接受accept的操作,所有receive send操作都有这个worker进程处理。

sbin/nginx -s reload 平滑处理,重新加载配置文件

worker进程的进程号会变,但是所有的socket都不i受到影响。因为,master进程要求worker的所有socket句柄交给master管理。master会重新加载配置文件,从新分配内存worker进程,并将soceter句柄交给他完成。

协程机制

依附于线程的内存模型,切换开销小
遇阻塞及归还执行权,代码同步
无需加锁


总结:首先基于spoll多路复用机制,解决了io阻塞的回调通知问题。依靠master-worker的进程模型,可以实现平滑的过度,平滑的重启,并且基于worker的单线程模型和epoll多路复用机制,完成高效的操作。协程机制,将每一个用户的请求对应到线程中的某一个协程,在协程中利用spoll多路复用机制,完成同步调用的开发。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值