操作系统:进程间通信与线程间同步
进程线程通信方式之间的差异
每个进程有自己的地址空间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。
同一进程中的线程因属同一地址空间,可直接通信。
不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。
线程也被称为轻量级的进程,同一进程的线程共享全局变量和内存,使得线程之间共享数据很容易也很方便,但会带来某些共享数据的互斥问题。
许对程序为了提高效率也都是用了线程来编写。
父子进程的派生是非常昂贵的,而且父子进程的通讯需要ipc或者其他方法来实现,比较麻烦。而线程的创建就花费少得多,并且同一进程内的线程共享全局存储区,所以通讯方便。(进程间通信相对复杂,而线程之间由于共享进程的内存空间,所以通信相对较容易)
线程的缺点也是由它的优点造成的,主要是同步,异步和互斥的问题,值得在使用的时候小心设计。
只有进程间需要通信,同一进程的线程share地址空间,没有通信的必要,但要做好同步/互斥mutex,保护共享的全局变量。线程拥有自己的栈。同步/互斥是原语primitives.
而进程间通信无论是信号,管道pipe还是共享内存都是由操作系统保证的,是系统调用.
线程间通信:由于多线程共享地址空间和数据空间,所以多个线程间的通信是一个线程的数据可以直接提供给其他线程使用,而不必通过操作系统(也就是内核的调度)。
进程间的通信则不同,它的数据空间的独立性决定了它的通信相对比较复杂,需要通过操作系统。(需要通过系统调用)
以前进程间的通信只能是单机版的,现在操作系统都继承了基于套接字(socket)的进程间的通信机制。这样进程间的通信就不局限于单台计算机了,实现了网络通信。
进程间实现IPC,线程间应该做好互斥同步的保障。
一、进程间的通信方式
进程间的通信,它的数据空间的独立性决定了它的通信相对比较复杂,需要通过操作系统。以前进程间的通信只能是单机版的,现在操作系统都继承了基于套接字(socket)的进程间的通信机制。这样进程间的通信就不局限于单台计算机了,实现了网络通信。
进程通信机制主要有:管道、有名管道、信号、信号量、消息队列、共享内存、套接字。
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。(用路径名指出该管道)
# 信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知
# 信号量(semophore ): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
# 套接字(socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它实现了实现了网络通信。
二、线程间的通信方式
1. 锁机制:包括互斥锁、条件变量、读写锁 、信号量
1. 互斥锁提供了以排他方式防止数据结构被并发修改的方法。
2. 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
3. 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
4. 信号量机制(Semaphore):包括无名线程信号量和命名线程信号量 。允许多个线程同时进入临界区
信号机制(Signal):类似进程间的信号处理
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
线程之间所谓的通信其实主要是为了保证同步,而进程之间的通信主要是为了数据的交换
操作系统:进程间通信与线程间同步相关推荐
- 进程间通信 和 线程间同步
以前经常搞混,所以记录下来. 进程间通信主要是指多个进程间的数据交互. 而线程间同步主要指维护多个线程之间数据准确.一致性. 一.进程间通信主要有以下几种方式: 管道(pipe):管道是一种半双工的通 ...
- linux线程间通信优点,进程间通信与线程间通信【转】
一个进程写管道:写入字节数小于PIPE_BUF是原子操作,写操作在管道缓冲区没有及时读走时发生阻塞. 一个进程读管道:读操作在管道缓冲区没有数据时发生阻塞. 以前一直想找个机会总结一下进程和线程的通信 ...
- IOT-OS之RT-Thread(六)--- 线程间同步与线程间通信
文章目录 一.IPC对象管理 1.1 IPC对象控制块 1.2 IPC对象接口函数 二.线程间同步对象管理 2.1 信号量对象管理 2.2 互斥量对象管理 2.3 事件集对象管理 三.线程间通信对象管 ...
- Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)
本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...
- LinuxC高级编程——线程间同步
LinuxC高级编程--线程间同步 宗旨:技术的学习是有限的,分享的精神是无限的. 1. 互斥锁mutex 多个线程同时访问共享数据时可能会冲突.对于多线程的程序,访问冲突的问题是很普遍的,解决的办法 ...
- 线程间同步和通信,event semaphore mailbox
线程间同步和通信,event semaphore mailbox 1. 概述 2. 事件event 3. wait_order() 4. 旗语(semaphore) 5. semaphore::get ...
- Java 多线程(六)——进程间通信与线程间通信
以前一直想找个机会总结一下进程和线程的通信机制,但由于技术和平台的局限性,一直没有找准切入点.由于马上要毕业了,对自己技术的总结和梳理的前提下写了本篇文章,如有错误之处,敬请拍砖和指教. 操作系统的主 ...
- 进程间通信和线程间通信
进程间通信 转自 https://www.cnblogs.com/LUO77/p/5816326.html 线程间通信 https://www.cnblogs.com/jobs1/p/107840 ...
- 进程间通信和线程间通信的几种方式
进程和线程的区别: 对于进程来说,子进程是父进程的复制品,从父进程那里获得父进程的数据空间,堆和栈的复制品. 而线程,相对于进程而言,是一个更加接近于执行体的概念,可以和同进程的其他线程之间直接共享数 ...
最新文章
- 在华为路由器上配置IPv6 over IPv4隧道
- 深度学习新算法,完成字里行间的情绪识别
- 令人头疼的clientTop、scrollTop、offsetTop
- SAP Spartacus B2B User 页面的数据读取逻辑设计
- 设计模式 日志系统设计_模式:我们设计系统的故事
- 《阿凡达》3月12日内地重映:部分影院已开启预售
- 你有多温柔,就有多强大
- BEAST 漏洞相关
- 魅族android面试题,【魅族小米IT面试题】面试问题:Android… - 看准网
- 高精度PSEnet文本检测在windows/linux运行教程
- 伪静态页面在iis7.0中的配置
- CPU说:这个世界太慢了
- exePath must be specified when not running inside a stand alone exe
- android顶部按钮图片,安卓动态改变button顶部图片即drawableTop属性
- 浙大 java语言程序设计编程答案,浙大《Java语言程序设计》编程答案4
- 2008春晚,赵本山之《火炬手》(现场版最新完整台词)
- 带你了解CSS开发中的10个不要
- 快速用浏览器在线查看.ipynb文件
- C++ 二叉搜索树(补充)
- 临商银行罗庄支行能耗监测系统的应用
热门文章
- 关于公司内部域名称是否要和外部真实域名称对应的问题
- 关于对cross-browser支持的一些看法
- Mathematica求解微分方程组
- macOS 如何正确安装 Xcode 合适版本
- Linux 设置core dump
- Linux 安装 Elasticsearch-rtf
- deepin-Code::Blocks安装与配置
- 本科视觉算法实习生面经
- down 网卡端口周期性的up_down 网卡端口周期性的up_思科交换机端口down或up故障原因...
- linux系统安装后需要的有效小工具(持续更新)