0%

虽然本文是记录使用信号量保证进程的同步与互斥的,但是其实也可以看做是进程之间的通信问题,为了与前面的保持一致,所以还是叫做 Linux进程间通信了!

信号量

基本概念

进程间通信的方式有管道、消息队列、共享内存这些都是进程间的信息通信,而信号量可以理解为进程使用的临界资源的状态说明,信号量主要用于保证同步与互斥

  • 临界资源:两个进程看到的一份公共资源称之为临界资源
  • 临界区:各个进程中访问临界资源的代码叫做临界区
  • 互斥:每个进程访问临界资源的时候必须是独占式的(排他式的),只能自己一个人访问
  • 同步:防止不间断的占有资源和释放资源,这样的话其他进程就会长时间得不到资源,这样会造成进程的饥饿问题

由此可见我们之前用于进程间通信的管道,消息队列,共享内存都是临界资源,管道是内核已经提供了同步与互斥,但是消息队列和共享内存都是不保证同步与互斥的

本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流。

Nginx能做什么

  • 反向代理
  • 负载均衡
  • HTTP服务器(动静分离)
  • 正向代理

以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做。

commit message 规范

代码风格统一,代码提交信息的说明准确,那么在后期协作以及Bug处理时会更加方便,先来介绍推荐采用的commit规范吧,Commit message格式如下: type(scope): subject 注意冒号后面有空格,type用于说明commit的类别,只允许使用下面7个标识:

type:type用于说明commit的类别

  • feat:新功能(feature)

  • fix:修补bug

  • docs:文档(documentation)

  • style: 格式(不影响代码运行的变动)

  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)

  • test:增加测试

  • chore:构建过程或辅助工具的变动

如果type为feat和fix,则该commit将肯定出现在Change log之中。

scope:可选项,用于说明commit的影响范围

subject::commit 目的的简短描述,不超过50个字符,且结尾不加句号

消息队列

消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI)

消息队列不提供同步与互斥

消息队列不提供同步与互斥

消息队列不提供同步与互斥

Linux进程间通信的基本思想是:让两个进程看到一份公共的资源!

Linux进程间通信的目的

  • 数据传输:⼀个进程需要将它的数据发送给另⼀个进程
  • 资源共享:多个进程之间共享同样的资源。
  • 通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它们发生了某种事件(如进程终止时要通知父进程)。
  • 进程控制:有些进程希望完全控制另⼀个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变

通信方式之管道

管道是Unix中最古老的进程间通信的形式。 我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个”管道”

  • 管道是面向字节流的
  • 管道的生命周期:与进程一致
  • 管道只能用于单向通信
  • 内核会对管道操作进行同步与互斥

Git基本概念

Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库

内存管理的形式

  • 栈: 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的,当方法和语句块一结束,空间马上释放
  • 内存映射段:是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信
  • 堆:堆用于程序运行时动态内存分配,堆是可以上增长的,存放的是成员变量,随着对象而产生,随对象销毁而销毁
  • 数据段:存储全局数据和静态数据
  • 代码段:可执行的代码/只读常量

美国国家航空航天局(NASA)开发人员的工作是编程界最具挑战性的工作之一。 他们编写代码并开发关键任务应用程序,安全是他们主要关注的重点。 在这种情况下,制定严谨的编码准则并遵循,对于他们来说十分重要。这些规则涵盖了软件开发的各个方面,如应该如何编写软件,应该使用哪些语言特性等等。

尽管很难就一个编码标准达成共识,NASA 的 JPL 首席科学家 Gerard J. Holzmann 还是制定了一套名为”发展安全关键代码的十大规则”的代码准则,由所有工作人员共同遵循。

由于 JPL 的工作内容与 C 语言相关,因此本指南主要关注用 C 编程语言编写的代码。但也可以灵活运用到其他语言上。