当前位置:网站首页>程序、进程、线程、协程的概念及区别
程序、进程、线程、协程的概念及区别
2022-08-04 05:26:00 【fcc627】
一、概念
程序是一组指令的有序集合,本身并没有任何运行的含义,它只是一个静态的实体。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程。
协程属于线程,即一个线程下面可以开辟多个协程。
二、程序与进程
- 一个运行中的程序至少有一个进程,一个进程至少有一个线程。
- 进程有自己的生命周期:因创建而产生,因调度而运行,因等待资源或事件处于等待状态,因完成任务而被撤销,反映了一个程序在一定的数据集上运行的全部动态过程。
- 程序与进程是一对多的关系,程序在不同的数据集上运行就成为不同的进程。
- 进程具有并发性和交往性,而程序具有封闭性。
三、进程与线程
- 一个进程至少有一个线程
- 进程在执行过程中有独立的运行单元,而多个线程共享内存,极大地提高了程序的运行效率
- 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能独立执行,必须依赖在应用程序中,由应用程序提供多个线程执行控制。多线程的意义在于,一个应用程序中,有多个执行部分可以同时执行
- 进程是具有一定独立功能的程序在一定数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位
- 线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可与同属一个进程的其他线程共享线程所拥有的全部资源
- 一个进程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行
进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。
四、线程与协程
协程是用户态的轻量级线程。
协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。
当多个协程切换时,由于其同属于一个线程,所以可以看作是同步执行的,不存在同时共享资源的情况,可以不加锁的访问全局变量,切换上下文非常快。
对于不需要cpu大量参与的业务场景来说,比如io广泛的业务,建议使用协程。
什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,
这样就大大提高了程序的效率。
多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要CPU时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
线程太多会导致控制太复杂,最终可能造成很多Bug;
什么是单线程?
单线程就是在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
边栏推荐
猜你喜欢
7.13 Day20----MYSQL
The cost of automated testing is high and the effect is poor, so what is the significance of automated testing?
想好了吗?
C1认证之web基础知识及习题——我的学习笔记
8、自定义映射resultMap
Can‘t connect to MySQL server on ‘localhost3306‘ (10061) 简洁明了的解决方法
SLSA 框架与软件供应链安全防护
FLV格式详解
Programming hodgepodge (4)
MySQL数据库(基础)
随机推荐
Can‘t connect to MySQL server on ‘localhost3306‘ (10061) 简洁明了的解决方法
【JS】js给对象动态添加、设置、删除属性名和属性值
力扣:62.不同路径
Unity DOTS学习教程汇总
注意!软件供应链安全挑战持续升级
擎朗智能全国研发创新中心落地光谷:去年曾获2亿美元融资
解决安装nbextensions后使用Jupyter Notebook时出现template_paths相关错误的问题
Wwise入门和实战
多个gcc/glibc版本的共存及指定gcc版本的编译
FPGA学习笔记——知识点总结
JS原型链
OpenRefine开源数据清洗软件的GREL语言
thymeleaf中onclick事件动态传递参数问题
部署LVS-DR群集【实验】
7. Execution of special SQL
8.03 Day34---BaseMapper查询语句用法
8款最佳实践,保护你的 IaC 安全!
Grain Mall - Basics (Project Introduction & Project Construction)
npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
谷粒商城-基础篇(项目简介&项目搭建)