当前位置:网站首页>程序、进程、线程、协程的概念及区别
程序、进程、线程、协程的概念及区别
2022-08-04 05:26:00 【fcc627】
一、概念
程序是一组指令的有序集合,本身并没有任何运行的含义,它只是一个静态的实体。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程。
协程属于线程,即一个线程下面可以开辟多个协程。
二、程序与进程
- 一个运行中的程序至少有一个进程,一个进程至少有一个线程。
- 进程有自己的生命周期:因创建而产生,因调度而运行,因等待资源或事件处于等待状态,因完成任务而被撤销,反映了一个程序在一定的数据集上运行的全部动态过程。
- 程序与进程是一对多的关系,程序在不同的数据集上运行就成为不同的进程。
- 进程具有并发性和交往性,而程序具有封闭性。
三、进程与线程
- 一个进程至少有一个线程
- 进程在执行过程中有独立的运行单元,而多个线程共享内存,极大地提高了程序的运行效率
- 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能独立执行,必须依赖在应用程序中,由应用程序提供多个线程执行控制。多线程的意义在于,一个应用程序中,有多个执行部分可以同时执行
- 进程是具有一定独立功能的程序在一定数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位
- 线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可与同属一个进程的其他线程共享线程所拥有的全部资源
- 一个进程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行
进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。
四、线程与协程
协程是用户态的轻量级线程。
协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。
当多个协程切换时,由于其同属于一个线程,所以可以看作是同步执行的,不存在同时共享资源的情况,可以不加锁的访问全局变量,切换上下文非常快。
对于不需要cpu大量参与的业务场景来说,比如io广泛的业务,建议使用协程。
什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,
这样就大大提高了程序的效率。
多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要CPU时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
线程太多会导致控制太复杂,最终可能造成很多Bug;
什么是单线程?
单线程就是在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
边栏推荐
猜你喜欢
随机推荐
8.03 Day34---BaseMapper query statement usage
MySQL database (basic)
7.18 Day23----标记语言
Embedded system driver primary [3] - _IO model in character device driver foundation
实际开发中左菜单自定义图标点击切换
Cannot read properties of null (reading ‘insertBefore‘)
scrapy 爬取当当图书名字图片
字符串常用方法
LCP 17. 速算机器人
手把手教你实现buffer(二)——内存管理及移动语义
解决安装nbextensions后使用Jupyter Notebook时出现template_paths相关错误的问题
FLV格式详解
力扣:63. 不同路径 II
部署LVS-DR群集【实验】
OpenCV获取和设置图像的平均亮度
8款最佳实践,保护你的 IaC 安全!
string类简介
Delphi-C端有趣的菜单操作界面设计
擎朗智能全国研发创新中心落地光谷:去年曾获2亿美元融资
想低成本保障软件安全?5大安全任务值得考虑