进程、线程、协程

article/2025/11/6 8:31:10

进程、线程、协程

一、概念与区分

1、进程

  • 进程是程序一次动态执行的过程,是程序运行的基本单位。
  • 每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。
  • 进程占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、页表、文件句柄等)比较大,但相对比较稳定安全。协程切换和协程切换

2、线程

  • 线程又叫做轻量级进程,是CPU调度的最小单位。

  • 线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。

  • 多个线程共享所属进程的资源,同时线程也拥有自己的专属资源。

  • 程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oj31EdX6-1630165452376)(D:\tec-note\photos\image-20210824185105401.png)]

3、协程

  • 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。
  • 一个线程可以拥有多个协程,协程不是被操作系统内核所管理,而完全是由程序所控制。
  • 与其让操作系统调度,不如我自己来,这就是协程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5Gnb3rp-1630165452378)(D:\tec-note\photos\image-20210824191000831.png)]

通信方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KUVSPFez-1630165542249)(D:\tec-note\photos\image-20210824193404782.png)]

线程的生命周期

  • 创建:线程从创建到被cpu执行之前的这个阶段。
  • 就绪:指线程已具备各种执行条件,一旦获取cpu便可执行。
  • 运行:表示线程正获得cpu在运行。
  • 阻塞:指线程在执行中因某件事而受阻,处于暂停执行的状态,阻塞的线程不会去竞争cpu。
  • 终止:线程执行完毕,接下来会释放线程占用的资源。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yulgz1q3-1630165452382)(D:\tec-note\photos\image-20210824193704443.png)]

进程调度算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0KNa5v8x-1630165452383)(D:\tec-note\photos\image-20210824193905266.png)]

一、先到先服务

先来先去服务调度算法是一种最简单的调度算法,也称为先进先出或严格排队方案。当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。该算法既可以用于作业调度,也可以用于进程调度。

二、最短进程优先

最短进程优先是一个非抢占策略,他的原则是下一次选择预计处理时间最短的进程,因此短进程将会越过长作业,跳至队列头。该算法即可用于作业调度,也可用于进程调度。但是他对长作业不利,不能保证紧迫性作业(进程)被及时处理,作业的长短只是被估算出来的。

三、时间片轮转法

轮转法是基于适中的抢占策略的,以一个周期性间隔产生时钟中断,当中断发生后,当前正在运行的进程被置于就绪队列中,然后基于先来先去服务策略选择下一个就绪作业的运行。这种技术也称为时间片,因为每个进程再被抢占之前都给定一片时间。

四、优先级调度

在进程等待队列中选择优先级最高的来执行

五、多级反馈队列调度算法

多级反馈队列算法,不必事先知道各种进程所需要执行的时间,他是当前被公认的一种较好的进程调度算法。其实施过程如下:

1)设置多个就绪队列,并为各个队列赋予不同的优先级。在优先权越高的队列中,为每个进程所规定的执行时间片就越小。

2)当一个新进程进入内存后,首先放入第一队列的末尾,按照先到先服务原则排队等候调度。如果他能在一个时间片中完成,便可撤离;如果未完成,就转入第二队列的末尾,同样等待调度…如此下去,当一个长作业(进程)从第一队列依次将到第n队列(最后队列)后,便按第n队列时间片轮转运行。

3)仅当第一队列空闲的时候,调度程序才调度第二队列中的进程运行;仅当第1到(i-1)队列空时,才会调度第i队列中的进程运行,并执行相应的时间片轮转。

4)如果处理机正在处理第i队列中某进程,又有新进程进入优先权较高的队列,则此新队列抢占正在运行的处理机,并把正在运行的进程放在第i队列的队尾。

死锁

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdtch9TT-1630165452384)(../../photos/image-20210828222031324.png)]

死锁产生的条件

1 互斥条件
指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2 请求和保持条件
进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程堵塞,但又对自己已获得的其他资源保持不放。

3 不剥夺条件
指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4 环路等待条件
指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

破坏死锁的方法

死锁产生的条件

1 互斥条件
指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2 请求和保持条件
进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程堵塞,但又对自己已获得的其他资源保持不放。

3 不剥夺条件
指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4 环路等待条件
指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

破坏死锁的方法

1 破坏互斥条件

方法: 如果允许系统资源都能共享使用,则系统不会进入死锁状态。

缺点: 有些资源根本不能同时访问,如打印机等临界资源只能互斥使用。所以,破坏互斥条件而预防死锁的方法不太可行,而且在有的场合应该保护这种互斥性。

2 破坏请求并保持条件

方法: 釆用预先静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不把它投入运行。一旦投入运行后,这些资源就一直归它所有,也不再提出其他资源请求,这样就可以保证系统不会发生死锁。

缺点: 系统资源被严重浪费,其中有些资源可能仅在运行初期或运行快结束时才使用,甚至根本不使用。而且还会导致“饥饿”现象,当由于个别资源长期被其他进程占用时,将致使等待该资源的进程迟迟不能开始运行。

3 破坏不可剥夺条件

方法: 当一个已保持了某些不可剥夺资源的进程,请求新的资源而得不到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着,一个进程已占有的资源会被暂时释放,或者说是被剥夺了,或从而破坏了不可剥夺条件。

缺点:该策略实现起来比较复杂,释放已获得的资源可能造成前一阶段工作的失效,反复地申请和释放资源会增加系统开销,降低系统吞吐量。这种方法常用于状态易于保存和恢复的资源,如CPU的寄存器及内存资源,一般不能用于打印机之类的资源。

4 破坏循环等待条件

方法: 为了破坏循环等待条件,可釆用顺序资源分配法。首先给系统中的资源编号,规定每个进程,必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提出申请分配资源Ri,则该进程在以后的资源申请中,只能申请编号大于Ri的资源。

缺点: 这种方法存在的问题是,编号必须相对稳定,这就限制了新类型设备的增加;尽管在为资源编号时已考虑到大多数作业实际使用这些资源的顺序,但也经常会发生作业使用资源的顺序与系统规定顺序不同的情况,造成资源的浪费;此外,这种按规定次序申请资源的方法,也必然会给用户的编程带来麻烦。


http://chatgpt.dhexx.cn/article/PAMrySKD.shtml

相关文章

终于明白:有了线程,为什么还要有协程?

并发的发展历史 其实,在早期计算机并没有包含操作系统,这个时候,这个计算机只跑一个程序,这个程序独享计算机的所有资源,这个时候不存在什么并发问题,但是对计算机的资源来说,确实是一种浪费。…

Java中的多线程(线程间通信)

/学习笔记/ 线程间通信: 多个线程在处理同一资源,但是任务却不同。 先看一个例子,采用两个线程执行进行输入和输出任务: //资源class Resource{String name;String sex;}//输入class Input implements Runnable{Resource r ;// …

协程和线程的区别、协程原理与优缺点分析、在Java中使用协程

文章目录 什么是协程协程的优点与缺点协程实现原理.协程与线程在不同编程语言的实现在Java中使用协程Kilim介绍Kilim整合Java,使用举例 小总结 什么是协程 相对于协程,你可能对进程和线程更为熟悉。进程一般代表一个应用服务,在一个应用服务中可以创建多…

进程、线程和协程之间的区别和联系

文章目录 一、进程二、线程三、进程和线程的区别与联系四、一个形象的例子解释进程和线程的区别五、进程/线程之间的亲缘性六、协程 一、进程 进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个…

简单了解线程和协程(C#)

1.为什么需要线程和协程: (1)使程序中的任务可以并发执行,让程序同时处理多个任务,提高程序的运行效率和响应速度 (2)线程和协程可以共享同一个进程的资源,避免多个进程之间的资源浪…

线程与协程

线程与协程 概念进程【进程间通信(IPC)】 线程协程 区别场景计算密集型IO密集型两种操作如何优化哪些语言对多协程的支持 概念 进程 二进制可执行文件在计算机内存里的一个运行实例。比如.exe文件是个类,进程就是new出来的那个实例&#xf…

总结:协程与线程

一、介绍 本文主要梳理下进程,线程,协程的概念、区别以及使用场景的选择。 二、进程 我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完…

Java线程协程

目录 线程的实现(OS&&JVM) 1.内核线程实现 2.用户线程实现 3.混合实现 4.Java线程的实现 ——如何实现不受Java虚拟机规范的约束 Java线程调度——系统自动完成(可能被干预) Java线程状态转换 内核线程的局限 协…

CDH6.3.2安装文档

正式安装之前,先说明一下CDH是基于Apache Hadoop及相关项目的发行版。CDH通过WEB界面管理,并提供了hadoop的两个核心功能:可扩展存储和分布式计算,以及企业级的重要功能。CDH是遵循Apache-licensed的开源软件,提供了基…

CDH数仓项目(一) —— CDH安装部署搭建详细流程

0 说明 本文以CDH搭建数据仓库,基于三台阿里云服务器从零开始搭建CDH集群,节点配置信息如下: 节点内存安装服务角色chen10216Gcloudera-scm-serverchen1038Gcloudera-scm-agentchen1048Gcloudera-scm-agent 上传需要用到的安装包&#xff…

CDH5.8安装说明

#CDH5.8安装说明 (Hadoop) 使用过Ambari,不知道是因为没有商业运作支撑还是社区活跃度有限,总体管理能力只能算凑合。很多Hadoop组件版本都不高,Spark也才1.3.X,Sqoop还是1.4.6.2.3,相对版本都比较低,而且…

大数据CDH安装详细教程

1.环境准备 1.1 服务器配置(理想配置) 1.2 修改主机名和hosts文件(所有节点) [roothadoop001 ~]# vim /etc/hosts vim /etc/hostname1.3 关闭防火墙 systemctl stop firewalld systemctl disable firewalld1.4 SSH免密登录(主节点) ssh-keygen -t rsa #分发到所有节点 ssh…

CDH6安装

官方文档 https://www.cloudera.com/documentation/enterprise/6/6.0/topics/installation.html 安装之前 JDK兼容性在不同的Cloudera Manager和CDH版本中也有所不同。某些版本的CDH 5与JDK 7和JDK 8兼容。在这种情况下,请确保所有服务都部署在同一主要版本上。例…

Cloudera(CDH) 简介和在线安装

实验背景 笔者需要维护线上的hadoop集群环境,考虑在本地搭建一套类似的hadoop集群,便于维护与管理。 Cloudera 简介 经过搜索发现Cloudera产品很适合笔者当前需求,于是开始研究Cloudera(CDH)的安装与使用,参…

CDH6.3.1安装

CDH6.3.1安装遇到很多问题,我想主要是由于条件有限,毕竟自己的电脑内存不如专业集群的内存大(如果是内存和硬盘充足,有些是可以避免的,甚至不会出现报错的情况),这里就介绍一下我用VMware安装的…

CDH安装配置

Cloudera5.14配置 准备工作 软件下载软件安装 JDK安装 所有节点 安装环境变量配置 sudo vim /etc/profile export JAVA_HOME/usr/java/default export PATH$JAVA_HOME/bin:$PATH 使用root用户 echo "JAVA_HOME/usr/java/default" >> /etc/environment …

CDH 6.3.2 安装(一)

目录 一、CDH框架介绍 1、CDH介绍 2、CDH官方网址 3、CDH官方文档 4、CDH集群扩容 5、CDH硬件要求 6、CDH k8s服务开启 二、CDH依赖安装 1、安装通用依赖 2、网络工具安装 3、防火墙服务安装 4、进程树形工具安装 5、其它依赖安装 三、Linux系统配置 1、主机名配…

CDH安装手册(自整理)

文章目录 前言1.组件版本2.集群规划(三台服务器为例)3.配置linux静态IP4.修改hosts文件,并实现免密登录5.创建集群分发脚本6.关闭防火墙和SELINUX(所有节点)7.配置NTP时钟同步8.安装jdk和mysql9.搭建本地yum源并安装10…

安装篇2 - 安装CDH

登陆Cloudera Manager平台 http://192.168.60.100:7180 账号密码:admin/admin 1.1 1.2 1.3 免费 2.1 2.2 2.3 2.4 选择CDH和Flink 2.5 将parcel包内的Hadoop,Hive等组件分发到各个节点进行解压激活 2.6 3.1 自行选择 自定义选择Zookeeper&#xff…

CDH5(CDH 5.16.1)安装

日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CDH 6系列(CDH 6.0.0、CDH 6.1.0、CDH 6.2.0等)安装和使用 CDH5(CDH 5.16.1)安装 linux配置 1.…