进程、线程、协程、管程

进程、线程、协程、管程

一般一个应用程序整体是一个进程, 进程中有多个线程来完成应用的各个功能。
比如一款多模态睡眠监护应用。 整个应用就是一个进程,应用中有UI主线程,数据存储线程,数据绘图线程等。
进程是操作系统进行资源分配和调度的一个基本单位,每个进程有自己的独立内存空间。进程内的各个线程是共享这些系统资源的。
进程间通过管道、消息、共享内存、信号量、信号、Socket进行通信。进程的上下文切换开销比较大,但是相对比较稳定安全。

线程是CUP调度和分配的基本单位, 线程只拥有少部分的系统资源,(比如程序计数器、一组寄存器和栈)。 线程间通信主要通过 共享内存和消息传递。 线程上下文切换比较快,资源开销小,但相比进程不够稳定

协程是一种用户态的轻量级线程,一个线程可以拥有多个协程,协程调度完全由用户控制,协程也拥有自己的寄存器上下文和栈。协程上下文切换非常快。 协程类似没有返回值的函数调用。

管程是一种程序结构,就是通常说的锁,保证一个时间点,最多只有一个工作线程在执行管程的某个子程序

进程线程区别

根本区别是,进程是操作系统资源分配和调度的基本单位, 而线程是CUP调度和分配的基本单位。
每个进程都有自己的虚拟地址空间,线程是共享所在进程的虚拟地址空间的,进程进行上下文切换的时候,伴随虚拟地址空间的切换,而线程则不会。

进程间通信

管道:管道就是内核中的一段缓存, 一端读入一段读出,单向通信,如果想双向的话就得创建两个管道,效率低不适合频繁得数据交互
消息队列:消息队列是在内核中的消息链表,类似发邮件。邮件通信有两点不足:不及时,附件大小有限制。消息队列不适合比较大数据的传输
共享内存:共享内存的机制,就是拿出一块虚拟地址空间来,映射到相同的物理内存中,这样一个进程写了内容另一个进程立马就看到了,不用来回拷贝
信号量: 使用共享内存就可能有并发问题,所以引入信号量实现进程间的互斥与同步。
信号:信号和信号量没关系。对于异常情况下的工作模式,就需要用「信号」的方式来通知进程
Socket:跨网络与不同主机上的进程之间通信

进程切换过程

一个进程切换到另一个进程运行,称为进程的上下文切换
CPU 寄存器和程序计数是 CPU 在运⾏任何任务前,所必须依赖的环境,这些环境就叫做 CPU上下⽂。
CPU上下文切换主要包括:进程上下文切换、线程上下文切换、中断上下文切换。
在这里插入图片描述
进程切换上下文需要保存包括分配的内存、数据段、堆栈段,代码段
线程切换上下午主要切换堆栈和寄存器的值,同一个进程里的线程只有堆栈不同。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甲 烷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值