聊聊进程、线程和协程的关系

本文深入探讨了进程、线程和协程的基础概念,它们之间的关系以及各自优缺点。进程是系统资源分配单位,线程是CPU调度单位,而协程则提供了一种轻量级的并发执行方式。多进程在资源隔离和程序稳定性方面有优势,但调度成本高;多线程资源共享便捷,但同步控制复杂,线程崩溃可能影响整个进程;协程调度灵活,资源占用少,但用户态管理较复杂。
摘要由CSDN通过智能技术生成

清晰的理解进程、线程和协程的关系,对深入理解计算机调度有很大的帮助。

在开始聊进程前,我们先要知道什么是程序,程序是一组计算机能够执行的指令的有序集合,是计算机硬盘上的数据文件。

进程

具有一定的独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程

是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行必不可缺的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享进程拥有的全部资源。

协程

又称微线程,在单线程上执行多个任务,用函数切换,开销极小。不通过操作系统调度,没有进程、线程的切换开销。

三者关系

线程可以创建和撤销另外的线程。同一个进程中的多个线程之间可以并行执行(轮流获取CPU的时间片,在总体上给人的感觉是同时在执行,这是并发,还有一个名词叫并行,就是多核多CPU,真正的同时在执行)。

相对与进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

三者区别

进程有别于线程和协程,进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程和协程只是进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一旦其他一个线程崩溃就等于整个进程崩溃,所以多进程的程序要比多线程的程序健壮,但在进程切换时,消耗资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

多进程优缺点

缺点

1.逻辑控制复杂,需要和主程序交互;

2.需要跨进程边界,如果有大数据量传送,就不太适合,适合小数据量转送、密集运算,多进程调度开销比较大;

3.最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多个线程可以为若干同类型的数据进行处理。当然可以利用多线程+多CPU+轮询方式来解决问题...

4.占用内存多,切换复杂,CPU利用率低;

优点

1.每个进程相互独立,不影响主进程的稳定性,子进程崩溃没关系,开启守护模式,可以将崩溃的子进程拉起来;

2.通过增加CPU,就可以容易扩充性能;

3.可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是多线程的模块算法效率低也没关系;

4.每个进程都有地址空间和相关资源,总体能够达到性能上限非常大;

5.编程简单,调度简单;

6.适用于多核、多机分布;如果一台机器不够,扩展到多台机器比较简单;

多线程优缺点

缺点

1.每个线程与主进程共用地址空间,受限于进程的地址空间;

2.线程之间的同步和加锁控制比较麻烦,同步复杂;

3.一个线程的崩溃会导致整个进程的崩溃;

4.编程复杂,调度复杂;

优点

1.无需跨进程边界;

2.程序逻辑和控制方式简单;

3.所有线程可以直接共享内存和变量等;

4.线程方式消耗的总资源比进程方式少;

5.创建销毁、线程切换简单,CPU利用率高;

协程优缺点

缺点

1.协程的资源在用户态,需要用户自己管理协程,涉及的调度模型比较复杂;

2.如果出现出现系统调用阻塞的话,可能导致大量线程的创建,从而因为资源泄漏。

优点

1.比线程更小占用、更小的执行单元;

2.它是一个执行单元,因为自带CPU上下文切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值