|
进程通信的目的. H* z' O, m2 b2 g5 x" e; i( Z5 G9 s IPC(Inter-Process Communication)进程间通信。 6 W- h- r& }: G 在没有学习进程通信前总感觉两个程序之间需要交换数据,一般都是基于文件,比如一个进程向文本文件里面写数据,而另外一个进程读取数据,当然这样两个进程的读写就需要互斥,然而这样的读写文件需要不断的读写磁盘,属实效率不高,那么今天就学习一波实际的进程通信 : ! N' Z: P6 y2 L 01 为什么需要进程通信 9 d1 j5 z% f& \- c) x6 T
7 Z7 i- E5 G4 k( X# f
; U" I) t% q& l* y
0 f, p8 K# N- g" g0 g7 t 02 进程通信特点 1 A+ a: ^& [' \* b 在文章开头,小哥一直以为是以类似于文本文件的方式共享,不过通过文件、数据库等等的方式交换信息,都需要通过读写磁盘来交换信息,这样导致效率非常低下,而进程通信相对需要比较迅速、实时。 5 ^2 E8 H0 n" O8 A' R$ L# E 然而进程之间是相互独立的,其用户空间不能随意访问,不过每个进程可以通过操作系统作为媒介来进行交互,这样就不需要通过那些缓慢的媒介,以加快通信。 对于Linux进程间通信大致可以分为如下6种通信方式: / E4 V8 q) _2 m! f0 y 01 管道pipe 4 T: p9 v: ^) E4 H3 H 管道可以分为 有名管道 和 无名管道 $ m* m t- L% W9 K% m7 w
' J) Q& _ a7 U. R/ u
& D! T# y0 @. u! W; r 02 信号signal - i$ Z7 z' F3 X8 [) \& X 机制比较复杂,比如用于通知接收进程某个事件已经发生. 03 消息队列 - G7 }9 Y& x* d( W 消息队列,存放在内核中,一种异步通信的典型。 9 `. B" E$ H6 N% `4 y. j 04 共享内存Shared Memory 该方式是直接读写内存,不需要额外的格式操作等,算是进程通信中最快的方式。 其类似于共享资源多进程操作,需要同步,比较常用的就是与信号量结合使用。 ! a/ n) ?% G/ F9 k. w3 f% E0 a 05 信号量semaphore 信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据,跟RTOS中线程中的信号量是类似的,最简单的01信号量,还有计数信号量等等。 / _* w4 ~* E2 u. N9 z3 C' g9 ~3 @ 06 套接字socket / ^3 ^4 ~4 p7 l7 p# [1 z V socket进程通信算是操作系统均有的一种IPC方式,所以是非常常见的。 , j: G. a/ f4 H2 A+ \) W. M 3最后 这里小哥就介绍了进程通信的基础知识,希望能够对你有帮助,今天就分享到这里,后面小哥在学习总结详细的进程通信知识! |
微信公众号
手机版