Nginx进程间的通信机制

简介: Nginx进程间的通信机制

概述


linux进程间通讯方式

在linux系统中进程之间的通讯方式有
套接字、共享内存、消息队列、管道、信号

Nginx进程间通讯方式

image.png

Nginx选择其中的套接字、共享内存、信号作为
同步master进程和多个worker进程间数据的方式

Nginx互斥锁

在多个进程访问共享资源时
还需要提供一种机制使各个进程有序、安全的访问资源
避免并发访问带来的未知结果
Nginx主要使用了3种同步方式
原子操作、信号量、文件锁



image.png

不要随意使用信号量来实现互斥锁

每个worker进程都会同时处理千万请求
处理任何一个请求都不应该阻塞当前进程处理后续的其他请求
不要随意使用信号量作为互斥锁
这会使得worker进程在得不到锁时进入睡眠状态
从而导致这个worker进程上的请求被饿死


共享内存


image.png

通过mmap或者shmget系统调用在内存中创建一块连续的线性地址空间
对应的通过munmap或者shmdt系统调用释放这块内存

共享内存的好处


image.png

当多个进程使用同一块共享内存时
在任何一个进程修改了共享内存中的内容后
其他进程通过访问这段共享内存都能得到修改后的内容

linux通过mmap向应用程序提供共享内存


image.png

mmap可以将磁盘文件映射到内存中
直接操作内存时Linux内核将负责同步内存和磁盘文件中的数据

mmap函数的5个入参含义

image.png

linux mmap函数
如果flags设置为不使用文件映射方式
则fd和offset参数则没有意义
此时的mmap函数的功能和ngx_shm_alloc的功能几乎完全相同

image.png

nginx定义共享内存的结构体


image.png

Nginx在Master进程fork出worker子进程后
所有的进程开始使用这块内存中的数据

统计某个时刻下nginx已经处理过的连接状况

作为Web服务器
Nginx具有统计整个服务器Http连接框架的功能
(不是某一个worker进程的状况,
而是所有worker进程连接状况)

image.png

共享内存中有一个原子变量
ngx_sta_reading表示正在接收TCP流的连接数

image.png

在接受请求的方法中将表示正在接收TCP流连接数的统计变量加1
在处理请求的方法中将该统计变量减1
相关文章
|
18天前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
18天前
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
20天前
|
消息中间件 存储 Linux
|
1月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
71 4
|
1月前
|
消息中间件 存储 网络协议
操作系统的心脏:深入理解进程间通信(IPC)机制
在现代计算机系统中,操作系统扮演着至关重要的角色,而进程间通信(IPC)作为操作系统的核心功能之一,极大地影响着系统的性能和稳定性。本文将通过浅显易懂的语言,详细探讨进程间通信的基本原理、主要类型及其实际应用,旨在为读者提供一个清晰且全面的理解和认识。 ##
125 1
|
2月前
|
人工智能 Kubernetes 算法
探究操作系统的心脏——进程管理机制
本文深入探讨了操作系统核心组件之一——进程管理机制。进程管理作为操作系统的基础功能,负责协调和控制计算机系统内运行的所有进程,确保系统资源的有效分配与利用。通过详细介绍进程的定义、状态转换、调度算法以及多线程技术等关键概念,本文揭示了进程管理如何支撑起整个操作系统的运行框架,并保障用户任务的顺利执行。同时,文章还讨论了现代操作系统在进程管理方面的创新与挑战,为读者提供了一个全面而深入的理解视角。
45 1
|
2月前
|
算法 调度 UED
探索操作系统的心脏——进程管理机制
本文将深入探讨操作系统中至关重要的部分——进程管理机制。我们将从基本概念入手,逐步解析进程的定义、状态及其在操作系统中的角色。随后,我们会详细讨论进程调度算法,包括先来先服务、短作业优先、时间片轮转和优先级调度等,分析它们的优势与应用情景。最后,通过实例展示这些算法在实际系统运作中的运用,帮助读者更好地理解进程管理的核心原理。
|
1月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
23 0
|
2月前
|
消息中间件 安全 Kafka
Python IPC机制全攻略:让进程间通信变得像呼吸一样自然
【9月更文挑战第12天】在编程领域,进程间通信(IPC)是连接独立执行单元的关键技术。Python凭借简洁的语法和丰富的库支持,提供了多种IPC方案。本文将对比探讨Python的IPC机制,包括管道与消息队列、套接字与共享内存。管道适用于简单场景,而消息队列更灵活,适合高并发环境。套接字广泛用于网络通信,共享内存则在本地高效传输数据。通过示例代码展示`multiprocessing.Queue`的使用,帮助读者理解IPC的实际应用。希望本文能让你更熟练地选择和运用IPC机制。
58 10
|
2月前
|
消息中间件 Python
深入理解操作系统的进程间通信(IPC)机制
本文将探讨操作系统中的核心概念——进程间通信(IPC),揭示其在系统运作中的重要性及实现方式。通过分析不同类型的IPC手段,如管道、信号、共享内存等,帮助读者更好地理解操作系统的内部工作原理及其在实际应用中的表现。
145 1