进程通信

1.进程间通信目的

数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程)。

2.进程通信方式
(1)管道(pipe)
(2)有名管道(FIFO)
(3)信号(signal)
(4)信号量(semaphore)
(5)消息队列
(6)共享内存(shared memory)
(7)套接字(socket)

管道

单向的、先进先出的、无结构的、固定大小的字节流,写进程在管道的尾端写入数据(写满再写会阻塞),读进程在管道的首端读出数据(读完再读会阻塞)。特点,一是半双工,只能单向传输;二是只能在父子进程间使用。

有名管道
(也叫FIFO)。与管道不同,FIFO不是临时的对象,它们是文件系统中真正的实体,可以用mkfifo命令创建。

信号
用于通知接受进程有某种事件发生,还可以发送信号给进程本身。信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。

消息队列
消息队列是消息的链接表,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。克服了信号承载信息量少,管道只能承载无格式字节流 以及缓冲区大小受限等缺点。

信号量
主要作为进程间以及同一进程不同线程之间的同步手段。信号量是用来解决进程之间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作

共享内存
是最有用也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。

共享内存实现的步骤:
1.创建共享内存,这里用到的函数是shmget,也就是从内存中获得一段共享内存区域。
2.映射共享内存,也就是把这段创建的共享内存映射到具体的进程空间中去,这里使用的函数是shmat。
3.使用不带缓冲的I/O读写命令对其进行操作。
4.撤销映射的操作,其函数为shmdt。

套接口
用于不同机器之间的进程间通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值