最近和 Nginx 杠上了( 四 )
需要说明的是 , Worker是不会接受命令的 , 而是通过Worker接受命令来统一管理所有Worker的行为 。
进程协助处理网络请求
知道Master与Worker之间如何通信之后再来看看它们是如何合作完成客户端请求的 。
文章图片
图6:Client请求流程
如图6所示 , 这里描绘了Master创建listen以及fork出Worker的过程 , 以及客户端请求和Worker响应请求的过程 。
①先从最上面开始看 , 顺着从上至下红色的箭头看 , Master进程创建以后会通过socket方法创建socket的IO通道 。
接着执行bind方法将其与监听器listen进行绑定 , 然后通过fork方法fork出多个Worker进程(绿色虚线) 。
【最近和 Nginx 杠上了】②在每个Worker进程中的accept方法就监听socket请求了 , 一旦listen监听到socket请求Worker进程就可以通过accept接受到 。
③再看最下面的client模块 , 当client通过connect方法与Nginx发生连接时 , 所有拥有accept方法的Worker进程都会接受到来自listen的通知 , 但是只有一个Worker进程能够成功accept到 , 其他的进程则会失败 。
这里Nginx提供了一把共享锁accept_mutex来保证同一时刻只有一个Worker进程在accept连接 , 从而解决惊群问题 。
④当Worker进程accept到socket请求以后 , client会通过send方法发送请求(绿色虚线)给Worker 。
而Worker使用recv方法接受请求你 , 同时通过parse(解析)、process(处理)、generate(生成响应)几个步骤将返回的响应通过send方法传送给client , 而client会使用recv方法接受响应 。
最后Worker调用close方法断开和client的连接 。
总结
本文从Nginx总体架构开始 , 介绍了Nginx的主要组成部分和处理流程 。 然后介绍Nginx的4个进程 , 以及Nginx在启动过程中这些进程都是如何产生的 。
然后聚焦到最为主要的Master进程的启动过程做了哪些具体的事情 , 特别是Master进程和Worker、CacheManager、CacheLoad之间的关系 。
在进程之间的信号发送方式的章节中 , 我们建立了信号、发送信号、信号处理、信号掩码的概念 , 这有助于理解进程之间的通信 。
最后 , 趁热打铁把Nginx接受网络请求以及进程之间如何合作处理请求的过程进行了讲解 。
作者:崔皓
简介:十六年开发和架构经验 , 曾担任过惠普武汉交付中心技术专家 , 需求分析师 , 项目经理 , 后在创业公司担任技术/产品经理 。 善于学习 , 乐于分享 。 目前专注于技术架构与研发管理 。
编辑:陶家龙
- 荣耀|今年过节不乱跑,荣耀智慧屏1499起,和年夜饭一样真香
- 分成|YY直播:2021年公会和主播分成超50亿
- CPU|E5系列处理器——工作室和生产力专业处理器,小白请勿购买
- 一嗨租车|倪光南最辉煌的时光是不是和柳传志的那段“蜜月期”?
- Linux|电脑城卖的CPU是intel而不是AMD,和实体店不喜欢卖小米手机是一个道理
- 文和友|泡泡玛特与飞书达成合作 新消费代表企业加速迁移飞书
- 芯片|据称索尼和台积电计划在日本投资70亿美元建芯片工厂
- |电脑界有两种说法“高U低显”和“低U高显”,你们觉得哪个合理?
- 体验首款Linux消费级平板,原来芯片和系统全是国产
- 美团|做成长和生财类的付费群的经验分享