ID:嵌入式情报局
作者:情报小哥
IPC(Inter-Process Communication)进程间通信。
在没有学习进程通信前总感觉两个程序之间需要交换数据,一般都是基于文件,比如一个进程向文本文件里面写数据,而另外一个进程读取数据,当然这样两个进程的读写就需要互斥,然而这样的读写文件需要不断的读写磁盘,属实效率不高,那么今天就学习一波实际的进程通信 :
01
为什么需要进程通信
1、数据传输:进程之间配合完成相关任务,相互之间需要交互一些数据,那么进程之间就可以通过通信进行数据的传输。
2、发送事件:比如当前进程需要终止另外一个进程,子进程的释放通知父进程。
3、资源共享:对于进程之间的共享资源需要进行互斥和同步机制。
4、进程控制:比如调试进程可以等待被调试进程的调试事件和继续调试进程的运行,读写被调试进程的存储空间等等。
02
进程通信特点
在文章开头,小哥一直以为是以类似于文本文件的方式共享,不过通过文件、数据库等等的方式交换信息,都需要通过读写磁盘来交换信息,这样导致效率非常低下,而进程通信相对需要比较迅速、实时。
然而进程之间是相互独立的,其用户空间不能随意访问,不过每个进程可以通过操作系统作为媒介来进行交互,这样就不需要通过那些缓慢的媒介,以加快通信。
对于Linux进程间通信大致可以分为如下6种通信方式:
01
管道pipe
管道可以分为 有名管道 和 无名管道
无名管道只能用于父子进程之间,单向通信的工作方式,半双工。
有名管道则无亲属关系的进程之间,提供给任意关系的进程使用。
02
信号signal
机制比较复杂,比如用于通知接收进程某个事件已经发生.
03
消息队列
消息队列,存放在内核中,一种异步通信的典型。
04
共享内存Shared Memory
该方式是直接读写内存,不需要额外的格式操作等,算是进程通信中最快的方式。
其类似于共享资源多进程操作,需要同步,比较常用的就是与信号量结合使用。
05
信号量semaphore
信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据,跟RTOS中线程中的信号量是类似的,最简单的01信号量,还有计数信号量等等。
06
套接字socket
socket进程通信算是操作系统均有的一种IPC方式,所以是非常常见的。
这里小哥就介绍了进程通信的基础知识,希望能够对你有帮助,今天就分享到这里,后面小哥在学习总结详细的进程通信知识!