一、进程间的通信方式

管道( pipe )

管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

调用pipe函数,会在内核中开辟出一块缓冲区用来进行进程间通信,这块缓冲区称为管道,它有一个读端和一个写端。

pipe函数接受一个参数,是包含两个整数的数组,如果调用成功,会通过pipefd[2]传出给用户程序两个文件描述符,需要注意pipefd [0]指向管道的读端, pipefd [1]指向管道的写端,那么此时这个管道对于用户程序就是一个文件,可以通过read(pipefd [0]);或者write(pipefd [1])进行操作。pipe函数调用成功返回0,否则返回-1..

那么再来看看通过管道进行通信的步骤:

  1. 父进程创建管道,得到两个文件描述符指向管道的两端
  2. 利用fork函数创建出子进程,则子进程也得到两个文件描述符指向同一管道
  3. 父进程关闭读端(pipe[0]),子进程关闭写端pipe[1],则此时父进程可以往管道中进行写操作,子进程可以从管道中读,从而实现了通过管道的进程间通信。

有名管道 (namedpipe) 

有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

信号量(semophore ) 

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

消息队列( messagequeue )

消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号 (sinal ) 

信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

共享内存(shared memory ) 

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

套接字(socket )

套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

二、线程间的通信方式

锁机制:包括互斥锁、条件变量、读写锁

  • 互斥锁提供了以排他方式防止数据结构被并发修改的方法。
  • 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
  • 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

信号量机制(Semaphore):包括无名线程信号量和命名线程信号量

信号机制(Signal):类似进程间的信号处理

进程、线程之间的通信方式相关推荐

  1. Java中线程之间的通信方式

    文章目录 1 volatile 2 synchronized 3 等待/通知机制--wait(), notify() (1) 等待/通知的相关方法: (2) 等待/通知的经典范式 (3) 循环队列:多 ...

  2. java不同进程的相互唤醒_JAVA多线程之线程间的通信方式

    一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过sy ...

  3. boost库中mutex、condition_variable与mutex::scoped_lock联合使用实现线程之间的通信

    最近在公司负责一个线程池的模块,里面用到了boost库中的mutex.condition_variable与mutex::scoped_lock,在此总结下线程池在使用时的方式和要点,这里记录了线程之 ...

  4. C/C++知识总结:进程线程面试题

    1.什么是进程?什么是线程? 进程是表示资源分配的基本单位,又是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格.内存空间.磁盘空间.I/O设备等.然后, ...

  5. Linux的进程/线程/协程系列4:进程知识深入总结:上篇

    Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...

  6. java多线程方式轮询,深入理解JAVA多线程之线程间的通信方式

    一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过sy ...

  7. 进程(线程)间同步互斥问题(三) 熟睡的理发师问题

    问题描述: 熟睡的理发师问题描述的是多个进程(线程)之间的通信与同步问题: 有一个理发师的椅子,和n个顾客的椅子 如果有顾客在椅子上等,那么理发师为他剪发,否则理发师就在自己的椅子上睡觉. 如果理发师 ...

  8. 进程 线程 协程 各自的概念以及三者的对比分析

    文章目录 1 进程 2 线程 3 进程和线程的区别和联系 3.1 区别 3.2 联系 4 举例说明进程和线程的区别 5 进程/线程之间的亲缘性 6 协程 线程(执行一个函数)和协程的区别和联系 协程和 ...

  9. Linux的进程/线程间通信方式总结

    Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程 ...

最新文章

  1. 2020长沙“科技之星”榜单重磅揭晓,近百家企业凭实力“出道”!
  2. 小哥质疑谷歌顶会论文有错,并且拿出了复现代码来证明
  3. 我把帮带份饭的信息错发给导师后.......
  4. pandas替换列值+1
  5. 为了OFFER,继续深入学习树和二叉树
  6. 科研实习 | 牛津大学英仕曼量化金融研究院招收机器学习+金融访问学生
  7. 翻遍全网!这4个Python项目最良心!(含视频源码)
  8. ng build --prod --aot打包Angluar4项目报javaScript heap out of memory,内存溢出
  9. 对数位dp的一些拙见
  10. [转]PHP或ASP   中Cookie禁用了,Session还能用吗?
  11. Exchange Server 2016 独立部署/共存部署 (三)—— 安装Exchange程序
  12. Unity3d之求物体体积
  13. AndroidStudio_百度人脸识别离线SDK_代码分析_使用流程_随时更新---Android原生开发工作笔记217
  14. [BZOJ1815BZOJ1488]有色图/图的同构(Polya定理)
  15. Apache Flink 零基础入门(七):Table API 编程
  16. 人均维护服务器数量,华为FusionCube一体机助力金华职业技术学院构建最佳云平台...
  17. 中国地区2012年第二季度 网络安全威胁报告
  18. 【每日最爱一句】2013.07.31
  19. [转]Win10 莫名卡顿问题解决(1903-1909版本)
  20. 数据流角度看DSO(一)

热门文章

  1. 人脸识别有滥用风险-2:长相被打分?暗中提价?
  2. python 爬取电子书_利用Python3爬取下载bookset网站的kindle电子书
  3. vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
  4. WORD封面信息下划线对齐问题?
  5. 刷脸支付助力业务增长 网付“唤新计划”全面赋能代理合作伙伴
  6. 网易面试题:男女小孩战队问题
  7. 企业固定资产管理软件系统特点
  8. echarts图例板块默认高亮与鼠标移入高亮实现
  9. 解决安卓全屏“FLAG_FULLSCREEN”状态下“adjustResize”失效,全屏状态下WebView的输入框被软键盘挡住的问题
  10. 当媒体厂商抛弃了手机二维码厂商,谁会将在手机二维码市场的大海中破冰启航?...