概述

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

Nginx进程间的通信机制相关推荐

  1. Nginx之进程间的通信机制(信号、信号量、文件锁)

    1. 信号 Nginx 在管理 master 进程和 worker 进程时大量使用了信号.Linux 定义的前 31 个信号是最常用的,Nginx 则通过重定义其中一些信号的处理方法来使用吸纳后,如接 ...

  2. Nginx之进程间的通信机制-Channel

    Nginx主要使用了其中的三种方式: 匿名套接字对 共享内存 信号 1. Nginx 频道 ngx_channel_t 频道是 Nginx master 进程与 worker 进程之间通信的常用工具, ...

  3. 深刻理解 Linux 进程间七大通信(IPC)

    前言 网络编程是 Linux C/C++的面试重点,今天我就来聊一聊进程间通信的问题,文章末尾列出了参考资料,希望帮助到大家. 篇幅有点长,希望大家耐心阅读. Linux 下的进程通信手段基本上是从 ...

  4. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  5. 运行中的Nginx进程间的关系

    第2章 Nginx的配置 Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能.使用这些模块时,仅仅需要增加.修改一些配置项即可.因此,本章的目的是熟悉 ...

  6. Linux系统编程(三)进程间的通信

    Linux系统编程(三)进程间的通信 一.为什么需要进程之间的通信(IPC)? 二.管道 1.概念 2.特质 3.原理 4.局限性 5.代码 2.读入数据 三.共享存储映射 注意事项 父子进程通信 一 ...

  7. 进程间的通信——无名管道

    进程间的通信--无名管道 宗旨:技术的学习是有限的,分享的精神是无限的. 一.进程间的通信 (1)同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO).消息队列和共享内存.无名管道多用 ...

  8. 进程间的通信——共享内存

    下面将讲解进程间通信的另一种方式,使用共享内存. 一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式 ...

  9. python多进程间通信_Python 多进程编程之 进程间的通信(Queue)

    Python 多进程编程之 进程间的通信(Queue) 1,进程间通信 Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法 ----这是操作系统 ...

最新文章

  1. sklearn onehot
  2. python顺序表数组_数据结构 | 顺序表
  3. OpenGL Tessellation and Geometry Shaders镶嵌和几何着色器的实例
  4. libfacedetection库 yufacedetectnet-open-v1.prototxt详解
  5. 如何在XSLT中将字符串转换为大写或小写形式
  6. mac地址随机变化的解决方法(安卓手机通用)不用ROOT
  7. 玩客云pc端_玩客云电脑客户端-玩客云pc端下载 v1.4.5.112官方版--pc6下载站
  8. 单元格填充为0的html,Excel如何在数据信息表中把空单元格填写为数字“0”
  9. php中的数值型字符串相加 相比较( ==)
  10. matlab判断同构数,c语言:编写函数判断x是否同构数
  11. selenium3填坑
  12. 【Java】Feil类概述
  13. 怎样设置计算机u盘启动程序,BIOS如何设置U盘为第一启动项
  14. Python 爬影评,《悬崖之上》好看在哪里?
  15. MySQL Cluster导入数据表时报错:Got error 708 'No more attribute metadata records (increas
  16. c# ListView增加条目
  17. openstack ironic standalone 方式部署
  18. 个人作业2---必应词典案例分析
  19. 中图法分类号(计算机专业)和文献标识码
  20. 好朋友同时撩三个妹子,扬言我也可以,我直呼好家伙---我把我偷学来的全都告诉你

热门文章

  1. ES6(三)——回调地狱和promise异步任务顺序执行(传参、错误处理)
  2. ES5(二)——替换this 之call()、apply()和bind()
  3. 3层b+树索引访问磁盘次数_从B+树到LSM树,及LSM树在HBase中的应用
  4. webpack4学习之问题一
  5. Redis 写磁盘出错 Cannot allocate memory
  6. 限制UI只能在屏幕内移动(放大或缩小屏幕同样适用)
  7. 获得三位数的百位,十位和个位
  8. php的SAPI,CLI SAPI,CGI SAPI
  9. ASP.Net 数据绑定之-----选择合适的数据控件
  10. centos7安装docker-ce新版