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
相关文章
|
11月前
|
应用服务中间件 nginx
Nginx进程配置指令详解
Nginx进程配置指令主要包括:`worker_processes`设置工作进程数;`worker_cpu_affinity`绑定CPU核心;`worker_rlimit_nofile`设置最大文件描述符数量;`worker_priority`设置进程优先级;`worker_connections`设置最大连接数;`daemon`控制守护进程模式;`master_process`启用主进程模式;`pid`设置PID文件路径;`user`指定用户和组;`error_log`配置错误日志。这些指令在`nginx.conf`中配置,用于优化和控制Nginx的运行行为。
505 10
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
328 16
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
683 4
|
消息中间件 存储 Linux
|
存储 监控 安全
探究Linux操作系统的进程管理机制及其优化策略
本文旨在深入探讨Linux操作系统中的进程管理机制,包括进程调度、内存管理以及I/O管理等核心内容。通过对这些关键组件的分析,我们将揭示它们如何共同工作以提供稳定、高效的计算环境,并讨论可能的优化策略。
324 20
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
401 4
|
消息中间件 程序员 数据处理
探究操作系统中的进程间通信(IPC)机制及其在现代软件开发中的应用
本文深入探讨了操作系统中的核心概念——进程间通信(IPC),揭示了其在现代软件开发中的关键作用。通过对各种IPC机制如管道、消息队列、共享内存等的详细分析,本文旨在为读者提供一个清晰的理解框架,帮助他们掌握如何在实际应用中有效利用这些技术以实现进程间的协同工作。此外,文章还将探讨IPC在高并发环境下的性能优化策略,以及如何避免常见的IPC编程错误。通过结合理论与实践,本文不仅适合希望深入了解操作系统原理的技术人员阅读,也对那些致力于提升软件质量和开发效率的程序员具有重要参考价值。
447 13
|
消息中间件 存储 网络协议
操作系统的心脏:深入理解进程间通信(IPC)机制
在现代计算机系统中,操作系统扮演着至关重要的角色,而进程间通信(IPC)作为操作系统的核心功能之一,极大地影响着系统的性能和稳定性。本文将通过浅显易懂的语言,详细探讨进程间通信的基本原理、主要类型及其实际应用,旨在为读者提供一个清晰且全面的理解和认识。 ##
934 1