发布网友 发布时间:2022-04-29 07:35
共1个回答
热心网友 时间:2022-04-19 01:27
Shared-memory:相互通讯的进程有共享存储区.进程间可以通过直接读写共享存储区的变量来交互数据,同步与互斥在并发程序设计时安排进入程序。操作系统提供这样的共享存储区及同步互斥工具。
最为快捷有效的方式之一,UNIX系统中常被使用。内存共享区的互斥要通过其它机制实现;数据的发送方不关心数据由谁接收,数据的接收方也不关心数据是由谁发送的,存在安全隐患。 message-passing:通过操作系统的相应系统调用进行消息传递通讯。分为直接和间接两种:
直接通信方式:点到点的发送
Send (DestProcessName, Message);
Receive (SourceProcessName, Message);
基本思想:进程在发送和接收消息时直接指明接收者或发送者进程ID。
缺点:必须指定接收进程ID。(UNIX的信号机制类似这种形式)
间接通信方式:以信箱为媒介进行传递,可以广播
Send (MailBox, Message);
Receive (MailBox, Message);
间接通信方式(信箱命名法)
基本思想:系统为每个信箱设一个消息队列,消息发送和接收都指向该消息队列。
缺点:必须有一个通讯双方共享的一个逻辑消息队列( UNIX的PIPE,FIFO及IPC消息传递机制都属于这种形式),使用时消息发送者约定写方式打开信箱,消息接受者约定读方式打开信箱或同时读写打开。
优点:很容易建立双向通讯链(只要对信箱说明为读写打开)。 是一种信息流缓冲机构, UNIX系统中管道基于文件系统,在内核中通过文件描述符表示。管道以先进先出(FIFO)方式组织数据传输。
实现方法:
调用pipe()函数创建管道
int pipe(int fd[2]);
fd[0]为管道里的读取端
fd[1]则为管道的写入端。
通过write()函数写入信息
int write (int handle,char *buf,unsigned len)
进程通过read()函数读取信息
int read (int handle,void *buf,unsigned len)
特点
1.管道是一个单向通信信道,如果进程间要进行双向通信,通常需要定义两个管道。
2.管道通过系统调用read(), write()函数进行读写操作。
分类
1.匿名管道:只适用于父子进程之间通信;管道能够把信息从一个进程的地址空间拷贝到另一个进程的地址空间。
2.命名管道:命名管道有自己的名字和访问权限的*,就像一个文件一样。它可以用于不相关进程间的通信,进程通过使用管道的名字获得管道。