news 2026/5/11 2:53:08

Nginx源码学习:Nginx的“内部电话系统“,Master如何用5条命令指挥Worker

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx源码学习:Nginx的“内部电话系统“,Master如何用5条命令指挥Worker

一、Master和Worker之间需要一条"电话线"

Nginx的进程模型是一个Master带一堆Worker。Master负责管理——读配置、fork子进程、监听信号、热升级;Worker负责干活——accept连接、处理请求、发送响应。分工很清晰,但带来一个直接的问题:Master怎么告诉Worker该干嘛?

最直觉的答案是Unix信号。Master用kill()给Worker发个SIGQUIT,Worker收到后优雅退出。Nginx确实也这么干了。但信号有个致命短板:它只能传递一个信号编号,不能传数据。

考虑这个场景:Master fork出一个新Worker进程,现有的Worker需要知道"有个新兄弟来了,它的PID是多少,它的通信端口是什么"。这种结构化数据,光靠一个信号编号搞不定。

再看一个更硬核的场景:Nginx需要在进程间传递文件描述符。你可能会想——fd不就是个整数吗,传过去不就完了?问题在于文件描述符是进程私有的。进程A的fd 7和进程B的fd 7可能指向完全不同的内核对象。要让进程B拿到和进程A"同一个"文件描述符,必须用Unix域套接字的SCM_RIGHTS辅助消息机制——这是操作系统提供的一种特殊能力,能把一个进程的文件描述符"复制"到另一个进程的文件描述符表中,让两个进程共享同一个底层socket endpoint。

所以Nginx设计了一套基于socketpair的进程间通信机制,源码集中在ngx_channel.h(35行)和ngx_channel.c(254行)。加上ngx_proce

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 13:11:05

DeerFlow效果案例:跨语言信息检索(中英混合)与统一报告生成

DeerFlow效果案例:跨语言信息检索(中英混合)与统一报告生成 1. DeerFlow是什么:一个能“自己查资料、写报告、做总结”的研究助手 你有没有过这样的经历:想快速了解一个新领域,比如“AI在医疗影像诊断中的最…

作者头像 李华
网站建设 2026/5/11 2:53:08

AI写论文福利来袭!这4款AI论文生成工具,让写职称论文轻松又高效!

实测AI论文写作工具 是否还在为撰写期刊论文、毕业论文或者职称论文而烦恼不已?当我们面对海量的文献资源,还要在复杂的格式中摸索,真的像在大海捞针。而且反复的修改过程往往令人感到疲惫,写论文的效率低下成为了很多学术人士的…

作者头像 李华
网站建设 2026/5/11 2:53:00

‘让他变老’指令实测:InstructPix2Pix智能老化效果展示

‘让他变老’指令实测:InstructPix2Pix智能老化效果展示 1. 引言:当AI成为你的时光魔法师 你有没有想过,如果有一台时光机,能让你看到自己或他人几十年后的样子,会是什么感觉?或者,作为一名内…

作者头像 李华
网站建设 2026/5/1 7:04:14

Qwen3-TTS-Tokenizer-12Hz开源大模型:Apache 2.0协议商用友好无授权风险

Qwen3-TTS-Tokenizer-12Hz开源大模型:Apache 2.0协议商用友好无授权风险 你是否遇到过这样的问题:想在语音产品中嵌入高质量音频压缩能力,却卡在授权模糊、商用受限、部署复杂这三座大山前?Qwen3-TTS-Tokenizer-12Hz来了——它不…

作者头像 李华
网站建设 2026/4/26 2:44:47

GTE模型与Kubernetes集成指南:构建高可用文本处理服务

GTE模型与Kubernetes集成指南:构建高可用文本处理服务 1. 为什么需要把GTE模型放进Kubernetes 你可能已经用过GTE模型做文本向量化,比如计算两句话的相似度,或者为RAG系统准备文档向量。但当业务规模上来后,问题就来了&#xff…

作者头像 李华