news 2026/4/3 3:34:45

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/3/27 11:02:57

GLM-Image优化技巧:使用Typora管理AI生成内容文档

GLM-Image优化技巧:使用Typora管理AI生成内容文档 你是不是也遇到过这样的场景?用GLM-Image生成了一堆设计稿、海报、概念图,结果文件散落在各个文件夹里,想找某个特定主题的图片得翻半天。或者,你给客户展示作品时&a…

作者头像 李华
网站建设 2026/3/27 21:23:25

Super Qwen Voice World在VMware虚拟化环境的最佳实践

Super Qwen Voice World在VMware虚拟化环境的最佳实践 1. 为什么要在VMware中部署Super Qwen Voice World 语音合成技术正从实验室走向真实业务场景,但很多团队在落地时遇到一个现实问题:如何在现有IT基础设施上高效运行这类计算密集型AI服务&#xff…

作者头像 李华
网站建设 2026/4/1 22:29:57

计算机毕业设计springbootMyshop购物平台 基于 SpringBoot 的 Myshop 在线购物系统的设计与实现 SpringBoot 框架下 Myshop 电商购物平台的开发与搭建

计算机毕业设计springbootMyshop购物平台j7453uwb (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。在互联网技术飞速发展的 21 世纪,电子商务行业迎来了爆发式的增长&…

作者头像 李华
网站建设 2026/3/27 17:38:22

Qwen3-VL:30B多模态能力展示:从图像理解到智能回复的完整案例

Qwen3-VL:30B多模态能力展示:从图像理解到智能回复的完整案例 1. 办公场景中的多模态革命 上周三下午三点,市场部同事发来一张模糊的商品包装图,附言:“这张图里有三个错误,能帮我们找出来吗?”——这在以…

作者头像 李华
网站建设 2026/3/20 4:51:00

DeepSeek-OCR-2云原生部署:Kubernetes集群方案

DeepSeek-OCR-2云原生部署:Kubernetes集群方案 1. 为什么需要在Kubernetes上运行DeepSeek-OCR-2 最近接触了不少文档处理需求,发现一个很实际的问题:单机部署的OCR服务在业务高峰期经常卡顿,而低峰期资源又大量闲置。这时候我就…

作者头像 李华