进程通信、同步和异步

进程间通讯方式

进程之间互相交换信息的工作称之为进程通信IPC (InterProcess Communication)(主要是指大量数据的交换)。

进程间通信的方式很多,包括:
1 命名管道FIFO
2 信号sinal
3 管道pipe
4 共享存储SharedMemory
5 消息队列MessageQueue(重要)
6 信号量Semaphore
7 套接字Socket(网络)

进程间通信机制

管道、FIFO、消息队列、信号量、共享内存是进程的通信机制,教材上没有线程的通信机制这样的说法,但可以肯定这几种方法是进程的通信方式,且其中的信号量既可用于进程、线程的同步,又可用于进程的通信。

管道与管程是不同的,管程是进程同步的方式,而管道则是进程通信的方式。

PS:
管程: 是定义了一个数据结构和在该数据结构上能为并发进程所执行的一组操作。这些操作能同步进程和改变管程中的数据。它是一种进程 同步机制。在结构上类似于面向对象中的类。在功能上和信号量和p,v操作类似。可以更方便的管理系统的临界资源。
管道: 是一种进程 通信机制。是共享文件模式,它基于文件系统,在两个进程之间,以先进先出的方式实现消息的单向传送。发送进程可以源源不断地从管道一端写入数据流,每次写入的长度是可变的;接收进程在需要时可以从管道的另一端读出数据,读出单位长度也是可变的。显然,管道通信的基础是文件系统。管道是一种特殊文件。

进程通信 也就是所谓的IPC问题,主要是指进程间交换数据的方式。进程通信包括高级通信与低级通信,其中进程同步与互斥 属于低级通信;高级通信包括三种:共享存储系统(有的地方称作共享内存区)、消息传递系统(有的地方称作消息队列)、管道

管道

半双工的( 允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;),固定的读端和写端。是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
管道分为pipe(无名管道)FIFO(命名管道) 两种,除了建立、打开、删除的方式不同外,这两种管道几乎是一样的。他们都是通过内核缓冲区实现数据传输。

pipe非命名管道 (即匿名管道)只能用于父子进程通讯。

FIFO命名管道 可用于非父子进程,管道是先进先出的通讯方式 。在磁盘上有对应的节点,但没有数据块——换言之,只是拥有一个名字和相应的访问权限,通过mknode()系统调用或者mkfifo()函数来建立的。一旦建立,任何进程都可以通过文件名将其打开和进行读写,而不局限于父子进程,当然前提是进程对FIFO有适当的访问权。

管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据:管道一端的进程顺序地将进程数据写入缓冲区,另一端的进程则顺序地读取数据,该缓

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值