进程间的通信方式总结

来源:互联网 发布:理财软件哪个口碑好 编辑:程序博客网 时间:2024/04/30 15:42

进程通信,是指进程之间的信息交换

具体通信方法有以下8种:

(一)低级进程通信

1. 信号量

适用场景:在进程互斥中,进程通过只修改信号量来想其他进程表明临界资源是否可用。

缺点:1)效率低,生产者每次只能向缓冲池投放一个产品(消息),消费者每次只能从缓冲区中取得一个消息。

           2)通信对用户不透明,其中共享数据结构的设置、数据的传送、进程的互斥与同步等,都必须有程序员去实现,操作系统只能提供共享存储器。


(二)高级进程通信

2. 共享存储器系统

适用场景:相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。

1)基于共享数据结构的通信方式。(低级通信)

举例:生产者-消费者问题,就是用有界缓冲区这种数据结构来实现通信的。

缺点:低效的,共享数据结构需要程序员设置,只适用于传递相对少量的数据。

2)基于共享存储区的通信方式。(高级通信)

在存储器中划出一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。


3. 消息队列

适用场景: 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。


4. 信号

适用场景:除了系统内核和root之外,只有具备相同id的进程才可以信号进行通信。

                  用于接受某种事件发生,除了用于进程间通信之外,进程还可以发送信号给进程本身。


5. 管道通信(可以实现一头读一头写)

1)无名管道

适用场景:是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系 通常是指父子进程关系。

2)有名管道

适用场景:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

3)高级管道

适用场景:将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。


6. socket通信

套接字( socket ) : 也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。


0 0
原创粉丝点击