学习笔记--进程及线程间通信方式的区别及联系
来源:互联网 发布:图书馆可视化数据工具 编辑:程序博客网 时间:2024/06/14 02:33
1、进程、线程通信概念:
(1)进程用户空间是相互独立的,一般而言是不能相互访问的,唯一的例外是共享内存区、 内核空间、以及可以访问的外设,所以不管是进程和线程都是需要通信的。
(2)进程通信要解决三个问题:
① 既一个进程如何把消息传递给另一个。
② 确保两个或者多个进程在关键活动中不会出现交叉。
③ 第三个问题与正确顺序有序。
这三个问题的后两个问题对线程也是使用的,所以同样的问题和解决方法也适用于线程。
(3)临界区:共享内存进行访问的程序片段。一个好通信方法满足下面四个条件:
① 任何两个进程不能同时处于其临界区
② 不应该对CPU的速度和数量做任何限制
③ 临界区外的运行进程不得阻塞其他进程
④ 不得使进程无限制等待进入临界区
(4)适用于线程之间的通信方式有:互斥锁、条件变量、读写锁、信号量、消息队列、事件
适用于进程之间的通信方式有:管道、信号量、消息队列、条件变量、共享内存、套接字
2、通信方式介绍:
(1)管道:
管道包括三种:
① 普通管道PIPE, 通常有两种限制,一是半双工,只能单向传输;二是只能在父子进 程间使用.
② 流管道s_pipe: 去除了第一种限制,可以双向传输.
③ 命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通 讯.
(2)信号量:
① 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
② 信号量不仅可以解决互斥,还可以实现同步,消费者-生产者模型中,信号量mutex 是用来实现互斥的,信号量full,empty是用来实现同步的,互斥量是信号量的一 种特殊形式。
(3)条件变量(信号):
条件变量容许线程由于一些未达到的条件而阻塞,条件变量可以在某些时候被阻塞,在另一些时候被唤醒,这样就不用cpu去忙循环判断了。条件变量往往和互斥量一起使用。
(8)消息队列:
如果没有共享内存的情况下,可以通过消息队列实现,消息队列是由消息的链表存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(9)共享内存:
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信,共享内存不能用于线程间的同步。
(10)套接字:
套接字是一种进程之间的通信方式,与其他通信方式不同,它可以用于不同机器间的进程通信。
- 学习笔记--进程及线程间通信方式的区别及联系
- 学习笔记--进程与线程的区别及联系
- 进程间,线程间的通信方式及进程与线程的区别
- 进程和线程的区别及联系
- 进程和线程概述、区别及联系
- 程序,进程及线程的区别于联系
- 进程和线程的定义、关系及区别联系
- 进程与线程之间的区别及联系
- 多线程 学习笔记<4> 进程与线程的区别联系
- 线程及 进程间的通信问题!
- 线程及进程间的通信
- 进程间通信的方式及比较
- 进程间通信的方式及比较
- 进程间通信的方式及比较
- 进程与线程的区别及相应的通信方法
- 进程,线程通信与同步及区别
- 进程,线程通信与同步及区别
- 进程与线程及进程间通信
- string object to oracle check
- 14级组队赛第一场3317- 反演
- UIImageview 模糊、高斯模糊
- Android开发入门(初学)
- Java中堆内存与栈内存分配浅析
- 学习笔记--进程及线程间通信方式的区别及联系
- QQ中未读气泡拖拽消失的实现分析
- SpringMvc[学习手记]-框架搭建
- 使用Uncrustify在Xcode中格式化Objective-C代码
- linux 查找文件或目录
- android应用使用ant打包过程
- 互联网金融风生水起,伊斯兰金融要登台了?
- idea在WEB-INF下建立lib目录导入jar包
- 杰出人士的七种共性之2-独善其身