进程,线程和协程

进程

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础

线程

  • 线程有时也被叫做轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。
  • 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有系统资,只拥有一点在运行过程中必不可少的资源,但他可以与同属一个进程的其他线程共享进程所拥有的全部资源
  • 线程拥有自己独立的栈和共享堆,共享堆但不共享栈。线程的切换一般也由操作系统完成。
  • 线程具有五种状态:初始化、可运行、运行中、阻塞、销毁

协程

协程是一种比线程更加轻量级的一种函数。一个线程可以拥有多个协程。协程不是被操作系统内核所管理的,而是完全由程序所控制的,即在用户状态所执行。这样的好处是:性能大幅度提升,因为不会像切换线程那样消耗资源。

  • 注:一个线程中的多个协程运行时是串行的。当一个协程运行时,其他协程一定是挂起的。

进程,线程,协程的对比

  • 协程既不是进程也不是线程,协程仅是一个特殊的函数。协程,进程和线程不是一个维度的。
  • 一个进程可以包含多个线程,一个线程可以包含多个协程。
  • 协程与进程一样,也存在上下文切换问题。
  • 进程的切换者是操作系统,切换时机是根据操作系统自己的策略进行的,用户是无感的。进程的切换内容包括页全局目录,切换内容被保存在内存中。进程切换过程采用的是“从用户态到内核态到用户态”的方式,切换效率低。
  • 线程的切换者是操作系统,切换时机是根据系统自己的切换策略来执行的,用户是无感的。线程切换的内容包括内核栈和硬件上下文。线程切换内容被保存在内核栈中。线程切换过程采用的是“从用户态到内核态到用户态”的方式,切换效率中等。
  • 协程的切换者是用户(编程者或应用程序),切换时机是用户自己的程序来决定的。协程的切换内容是硬件上下文,切换内容被保存在用户自己的变量(用户或堆栈中)。协程的切换过程只有用户态(即没有陷入内核态),因此切换效率高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

smile_new

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

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

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

打赏作者

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

抵扣说明:

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

余额充值