
进程通信的目的# \, c" [+ S2 V6 x9 t& C9 h) I IPC(Inter-Process Communication)进程间通信。 % \# _$ i+ m; O! T7 } 在没有学习进程通信前总感觉两个程序之间需要交换数据,一般都是基于文件,比如一个进程向文本文件里面写数据,而另外一个进程读取数据,当然这样两个进程的读写就需要互斥,然而这样的读写文件需要不断的读写磁盘,属实效率不高,那么今天就学习一波实际的进程通信 : / t2 E9 w9 f; E' N+ r- { 01 为什么需要进程通信
! G/ D' e, U7 W 02 进程通信特点 在文章开头,小哥一直以为是以类似于文本文件的方式共享,不过通过文件、数据库等等的方式交换信息,都需要通过读写磁盘来交换信息,这样导致效率非常低下,而进程通信相对需要比较迅速、实时。 : E6 Z, f. W4 o( w4 b 然而进程之间是相互独立的,其用户空间不能随意访问,不过每个进程可以通过操作系统作为媒介来进行交互,这样就不需要通过那些缓慢的媒介,以加快通信。 对于Linux进程间通信大致可以分为如下6种通信方式: + K' f/ z% L- i) o 01 管道pipe 管道可以分为 有名管道 和 无名管道
6 W! J/ a6 ?7 u G0 b& ]
02 信号signal 6 P' }: r' V$ V( r4 } 机制比较复杂,比如用于通知接收进程某个事件已经发生. & [' M* W; ~3 z; D9 a 03 消息队列 $ a9 e! U) {* X) ~8 Q5 p 消息队列,存放在内核中,一种异步通信的典型。 - ^" q) H$ a8 p3 L' ? 04 共享内存Shared Memory 该方式是直接读写内存,不需要额外的格式操作等,算是进程通信中最快的方式。 其类似于共享资源多进程操作,需要同步,比较常用的就是与信号量结合使用。 05 信号量semaphore 信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据,跟RTOS中线程中的信号量是类似的,最简单的01信号量,还有计数信号量等等。 % Y0 Q; M. |% r7 M 06 套接字socket socket进程通信算是操作系统均有的一种IPC方式,所以是非常常见的。 这里小哥就介绍了进程通信的基础知识,希望能够对你有帮助,今天就分享到这里,后面小哥在学习总结详细的进程通信知识! |