网站首页 > 技术文章 正文
Nginx进程间的通信机制
概述
linux进程间通讯方式
在linux系统中进程之间的通讯方式有
套接字、共享内存、消息队列、管道、信号
Nginx进程间通讯方式
Nginx选择其中的套接字、共享内存、信号作为
同步master进程和多个worker进程间数据的方式
Nginx互斥锁
在多个进程访问共享资源时
还需要提供一种机制使各个进程有序、安全的访问资源
避免并发访问带来的未知结果
Nginx主要使用了3种同步方式
原子操作、信号量、文件锁
根据操作系统来选择互斥锁的实现方式
不要随意使用信号量来实现互斥锁
每个worker进程都会同时处理千万请求
处理任何一个请求都不应该阻塞当前进程处理后续的其他请求
不要随意使用信号量作为互斥锁
这会使得worker进程在得不到锁时进入睡眠状态
从而导致这个worker进程上的请求被饿死
共享内存
通过mmap或者shmget系统调用在内存中创建一块连续的线性地址空间
对应的通过munmap或者shmdt系统调用释放这块内存
共享内存的好处
当多个进程使用同一块共享内存时
在任何一个进程修改了共享内存中的内容后
其他进程通过访问这段共享内存都能得到修改后的内容
linux通过mmap向应用程序提供共享内存
mmap可以将磁盘文件映射到内存中
直接操作内存时Linux内核将负责同步内存和磁盘文件中的数据
mmap函数的5个入参含义
linux mmap函数
如果flags设置为不使用文件映射方式
则fd和offset参数则没有意义
此时的mmap函数的功能和ngx_shm_alloc的功能几乎完全相同
nginx定义共享内存的结构体
Nginx在Master进程fork出worker子进程后
所有的进程开始使用这块内存中的数据
统计某个时刻下nginx已经处理过的连接状况
作为Web服务器
Nginx具有统计整个服务器Http连接框架的功能
(不是某一个worker进程的状况,
而是所有worker进程连接状况)
共享内存中有一个原子变量
ngx_sta_reading表示正在接收TCP流的连接数
在接受请求的方法中将表示正在接收TCP流连接数的统计变量加1
在处理请求的方法中将该统计变量减1
- 上一篇: 进程间通信机制 进程间通信的作用
- 下一篇: linux系统下,进程间通信包含:管道、信号量
猜你喜欢
- 2024-10-01 原来“进程间通信”是这么回事! 什么叫进程间通信
- 2024-10-01 如何轻松掌握linux内核进程间通信方法
- 2024-10-01 Linux进程间通信(四) - 共享内存 linux共享内存休眠
- 2024-10-01 Linux进程间通信之匿名管道 linux配置匿名ftp服务器
- 2024-10-01 linux中的进程间通信-管道 linux进程间通信
- 2024-10-01 Linux讲解 进程间通信 命名管道 徐教头讲解象棋合集
- 2024-10-01 linux下进程通信的几种方式 linux系统下进程间通信
- 2024-10-01 Linux进程间通信——内存共享映射
- 2024-10-01 c/c++ Linux 进程间通信------共享内存
- 2024-10-01 Linux系统编程之进程间通信方式:消息队列
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)