Nginx源码分析-master和worker进程间的通信

原创 2010年11月17日 14:08:00

转载申明:本文可以任意转载,但需注明原文地址,谢谢!

 

前面单独分析了master进程和worker的工作情况,本文就大概看一下master进程和worker进程之间是如何使用channel来完成通信的。这部分实现的源码主要分布于src/os/unix/channel.h和channel.c两个文件中。实现极其简单,没有什么复杂的逻辑。下面,我绘制了一个简单的master进程和worker进程间的关系,图中的箭头符号指出数据是由master进程传给worker进程,而没有从worker到master;这是因为channel不是一个普通的数据传输管道,在Nginx中它仅仅是用着master发送指令给worker的一个管道,master借此channel来告诉worker进程该做什么了,worker却不需要告诉master该做什么,所以是一个单向的通道。

master进程每次发送给worker进程的指令用如下一个结构来完成封装:

 

这个结构中的4个字段分别是发送的指令、worker进程的pid、worker进程的slot(在ngx_proecsses中的索引)及一个文件描述符。master进程可能会将一个打开的文件描述符发送给worker进程进行读写操作,那么此时就需要填写fd这个字段了。worker进程在收到一个这样的结构数据后,通过判断command的值来采取相应的动作;command就是master给worker下达的命令。

 


 

master进程用于处理SIGCHLD信号的函数ngx_reap_children中就有向worker进程发送关闭channel的指令,我们看看这个例子是怎么做的。

 

这几行代码是我从ngx_reap_children函数中拼凑起来的,所以看上去好像有点奇怪,不那么顺畅;但却清晰的给我们展现了master进程怎么给一个worker进程发送指令,此处发送的指令时NGX_CMD_CLOSE_CHANNEL。发送指令的函数ngx_write_channel是利用sendmsg来完成,《Unix网络编程》可以详细了解sendmsg。

 

worker进程在调用ngx_worker_process_init进行初始化的时候,使用了如下两行代码将channel放到epoll等事件处理模块中。

 

 

当master进程发来指令后,就调用ngx_channel_handler函数进行事件的响应。下面浓缩的代码给出了ngx_channel_handler所做的事情。

 

Nginx中关于整个channel的实现就这么简单,没有什么多余的事情。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NGINX 进程通信机制

我认为nginx的进程通信分为三种类别:linux 系统与nginx 通信, master
  • spch2008
  • spch2008
  • 2014-08-30 17:05:18
  • 3572

nginx源码分析--master和worker进程模型

一、Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程。 ...
  • yusiguyuan
  • yusiguyuan
  • 2014-11-08 20:09:45
  • 3907

nginx的master和worker进程间的通信

本文 主要分析master进程和worker进程之间是如何使用channel来完成通信的。这部分实现的代码主要分布在src/os/unix/ngx_channel.c文件中。master进程将数据传给...
  • wuli2496
  • wuli2496
  • 2015-01-23 00:02:22
  • 1174

nginx学习(一)——基础概念之Master与Worker

本章参考自淘宝的nginx主页nginx平台初探 1.master与worker nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个wor...
  • xxcupid
  • xxcupid
  • 2016-09-10 14:43:27
  • 4174

Nginx学习——Nginx进程间的通信

nginx进程间的通信 进程间消息传递 共享内存 共享内存还是Linux下提供的最基本的进程间通信方式,它通过mmap和shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munma...
  • walkerkalr
  • walkerkalr
  • 2014-07-28 21:35:27
  • 2208

Nginx master工作流程

master工作流程图       master进程不需要处理网络事件,它不负责业务的执行,只会通过管理worker等子进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。  ...
  • yzt33
  • yzt33
  • 2015-07-28 00:00:12
  • 661

Nginx学习——进程模型(master 进程)

进程模型         Nginx分为Single和Master两种进程模型,Single模型即为单进程方式工作,具有较差的容错能力,不适合生产之用。Master模型即为一个master进程+N个w...
  • walkerkalr
  • walkerkalr
  • 2014-07-27 09:36:21
  • 2066

nginx学习十四 ngx_master_process_cycle(master进程)

ngx_master_process_cycle()函数,这个函数会启动工作进程干活,并且会处理信号量,处理的过程中会杀死或者创建新的进程,具体流程如下 a)  阻塞所有nginx关心的信号; b...
  • yanziguilai
  • yanziguilai
  • 2014-11-06 20:30:41
  • 1800

文章8:Nginx中与Master-Worker进程通信有关的内容

欢迎转载转载请注明出处http://blog.csdn.net/yankai0219/article/details/8453314 0.序 尽管本文内容精简了点,但个人认为还是将整个过程都分析到...
  • yazhouren
  • yazhouren
  • 2015-07-31 02:23:13
  • 564

nginx进程管理之master进程

nginx分为single和 master两种进程模型。master模型为一个master模型和n个worker进程的工作方式 。本文分析nginx的 master进程做了哪些事情,它是如何管理好各个...
  • wuli2496
  • wuli2496
  • 2015-01-17 20:38:39
  • 2262
收藏助手
不良信息举报
您举报文章:Nginx源码分析-master和worker进程间的通信
举报原因:
原因补充:

(最多只允许输入30个字)