相关文章推荐
坚强的馒头  ·  [BUG]运算符“<”不能应用于类型“boo ...·  9 月前    · 
威武的鸡蛋面  ·  Spring WebFlux ...·  1 年前    · 
瘦瘦的自行车  ·  ASP.Net Core Identity ...·  2 年前    · 
含蓄的汉堡包  ·  机器学习常用数据类型以及格式的转换 - ...·  2 年前    · 
坐怀不乱的蚂蚁  ·  Docker: Error ...·  2 年前    · 
小百科  ›  HL Mando Corporation[HL万都] (原Mando Corporation) - MarkLines ...
Tesla Semi
不拘小节的作业本
1 年前
海盗船长

进程和线程的概念、区别及进程线程间通信

腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
海盗船长
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
社区首页 > 专栏 > 进程和线程的概念、区别及进程线程间通信

进程和线程的概念、区别及进程线程间通信

作者头像
海盗船长
发布 于 2020-08-27 16:48:56
发布 于 2020-08-27 16:48:56
38.5K 0
举报
文章被收录于专栏: 基础知识文章 基础知识文章
进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的?
1. 基本概念:

进程是对运行时程序的封装,是 系统进行资源调度和分配的的基本单位,实现了操作系统的并发 ;

线程是进程的子任务, 是CPU调度和分派的基本单位 , 用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位 。每个线程都独自占用一个 虚拟处理器 :独自的 寄存器组 , 指令计数器和处理器状态 。每个线程完成不同的任务,但是 共享同一地址空间 (也就是同样的 动态内存,映射文件,目标代码等等 ), 打开的文件队列和其他内核资源 。

2. 区别:
  1. 一个线程只能属于一个进程,而一个进程可以有多个线程 ,但至少有一个线程。线程依赖于进程而存在。
  2. 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存 。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。)
  3. 进程是资源分配的最小单位,线程是CPU调度的最小单位 ;
  4. 系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见, 进程切换的开销也远大于线程切换的开销 。
  5. 通信:由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。 进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性 。在有的系统中,线程的切换、同步和通信都无须操作系统内核的干预
  6. 进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂 。
  7. 进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉
  8. 进程适应于多核、多机分布;线程适用于多核
进程间通信的方式:

进程间通信主要包括 管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket 。

1.管道:

管道主要包括 匿名管道和命名管道 :管道可用于具有亲缘关系的父子进程间的通信,命名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信

  • 1.1 匿名管道PIPE :
  1. 它是 半双工 的(即数据只能在一个方向上流动),具有固定的读端和写端
  2. 它 只能用于具有亲缘关系的进程之间的通信 (也是父子进程或者兄弟进程之间)
  3. 它可以看成是一种特殊的文件, 对于它的读写也可以使用普通的read、write等函数 。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
  • 1.2 命名管道FIFO:
  1. FIFO 可以在无关的进程之间交换数据
  2. FIFO有路径名与之相关联,它 以一种特殊设备文件形式存在于文件系统中 。
2. 系统IPC:
  • 2.1 消息队列 消息队列, 是消息的链接表,存放在内核中 。一个消息队列由一个标识符(即队列ID)来标记。 ( 消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点 )具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;

特点:

  1. 消息队列是 面向记录的 ,其中的消息具有特定的格式以及特定的优先级。
  2. 消息队列 独立于发送与接收进程 。进程终止时,消息队列及其内容并不会被删除。
  3. 消息队列 可以实现消息的随机查询 ,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
  • 2.2 信号量semaphore
 
推荐文章
坚强的馒头  ·  [BUG]运算符“<”不能应用于类型“boolean”和“RegExp” 或者 未终止的正则表达式字面量_运算符“<”不能应用于类型“boolean”和“regexp”。-CSDN博客
9 月前
威武的鸡蛋面  ·  Spring WebFlux FilePart transferTo方法不能将文件写入dest路径-腾讯云开发者社区-腾讯云
1 年前
瘦瘦的自行车  ·  ASP.Net Core Identity でログインユーザIDを取得 - Qiita
2 年前
含蓄的汉堡包  ·  机器学习常用数据类型以及格式的转换 - YTT77 - 博客园
2 年前
坐怀不乱的蚂蚁  ·  Docker: Error response from daemon: invalid volume specification: ubuntu - Stack Overflow
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号