16.进程-进程间通信概述

进程间通信,也就是大家常说的 IPC(Inter Process Communication),指的是不同的进程间进行交流,本质上就是进程之间发送和接收数据;

本质上,信号也是属于进程间通信的一种,但信号能传递的信息量实在是太少太少了;

不同进程间的进程空间是独立的。对于Linux 来说,进程的 0-3GB 空间是互不相干的,3GB-4GB 是内核空间,属于所有进程间共享地带;进程空间的独立性,以及内核空间的共享性;内核的共享特性,给进程的通信带来了可能;


有一种不通过内核的进程间通信方法:两个进程都读写同一个文件,进程间通过信号实现同步;

Linux上进程间通信的方式概述如下:

  • 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
  • 信号:信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;
  • 消息队列:消息队列是消息的链接表;有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点
  • 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥;
  • 信号量:主要作为进程间以及同一进程不同线程之间的同步手段;
  • 套接口:更为一般的进程间通信机制,可用于不同机器之间的进程间通信;

信号与信号量

信号和信号量是不同的,他们虽然都可用来实现同步和互斥,但前者是使用信号处理器来进行的,后者是使用P,V*作来实现的;

信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。

信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒;

信号是实现约定的固定的值,而信号量是一个变量记录着某些特定信息;

猜你喜欢

转载自blog.csdn.net/Regemc/article/details/80952327