您的位置:首页 > 其它

学习笔记--进程及线程间通信方式的区别及联系

2015-09-15 18:55 615 查看
1、进程、线程通信概念:

(1)进程用户空间是相互独立的,一般而言是不能相互访问的,唯一的例外是共享内存区、 内核空间、以及可以访问的外设,所以不管是进程和线程都是需要通信的。

(2)进程通信要解决三个问题:

① 既一个进程如何把消息传递给另一个。

② 确保两个或者多个进程在关键活动中不会出现交叉。

③ 第三个问题与正确顺序有序。

这三个问题的后两个问题对线程也是使用的,所以同样的问题和解决方法也适用于线程。

(3)临界区:共享内存进行访问的程序片段。一个好通信方法满足下面四个条件:

① 任何两个进程不能同时处于其临界区

② 不应该对CPU的速度和数量做任何限制

③ 临界区外的运行进程不得阻塞其他进程

④ 不得使进程无限制等待进入临界区

(4)适用于线程之间的通信方式有:互斥锁、条件变量、读写锁、信号量、消息队列、事件

适用于进程之间的通信方式有:管道、信号量、消息队列、条件变量、共享内存、套接字

2、通信方式介绍:

(1)管道:

管道包括三种:

① 普通管道PIPE, 通常有两种限制,一是半双工,只能单向传输;二是只能在父子进 程间使用.

② 流管道s_pipe: 去除了第一种限制,可以双向传输.

③ 命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通 讯.

(2)信号量:

① 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

② 信号量不仅可以解决互斥,还可以实现同步,消费者-生产者模型中,信号量mutex 是用来实现互斥的,信号量full,empty是用来实现同步的,互斥量是信号量的一 种特殊形式。

(3)条件变量(信号):

条件变量容许线程由于一些未达到的条件而阻塞,条件变量可以在某些时候被阻塞,在另一些时候被唤醒,这样就不用cpu去忙循环判断了。条件变量往往和互斥量一起使用。

(8)消息队列:

如果没有共享内存的情况下,可以通过消息队列实现,消息队列是由消息的链表存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

(9)共享内存:

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信,共享内存不能用于线程间的同步。

(10)套接字:

套接字是一种进程之间的通信方式,与其他通信方式不同,它可以用于不同机器间的进程通信。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: