计算机基础 - 进程、线程和协程一文搞懂

78 阅读4分钟

引言

您好,接下来我会尽量从初学者的视角简单描述一些计算机操作系统下的概念。不同的概念解决不同的技术问题,我们在学习知识时要从

  • 是什么(这个概念是什么意思)
  • 为什么(这个概念解决了什么问题,为什么会有这个概念)
  • 怎么做(这个概念是如何解决这些问题的,具体实现原理是什么)

三个层次去理解和阐述问题,这样,我们对这个概念的理解就比较深入了,能够融入到自己的知识体系中。

进程

  • 是什么

    • 进程是计算机系统执行程序的基本单位,是操作系统动态运行中的程序实体
    • 每个进程都有自己独立的内存空间
  • 为什么会有进程(解决了什么问题)

    • 通过将计算任务划分为不同的进程,可以让操作系统实现多任务处理,提高CPU利用率
    • 像写邮件、听音乐和下载文件等任务可以同时进行
  • 怎么解决的

    • 操作系统为每个进程分配独立的内存空间,同时给予必要的cpu时间片,使得多个进程按时间片轮流执行,实现了并发效果

线程

  • 是什么

    • 线程是比进程更小的执行单位,是操作系统调度CPU执行的最小单元。
  • 为什么会有线程(解决了什么问题)

    • 通过线程可以实现多任务在一个进程内部运行,相比进程上下文切换代价更小,效率更高。
  • 怎么解决的

    • 线程共享同一个进程的地址空间和数据,线程上下文切换时不需要涉及地址空间转换(因为是在同一个进程内执行),只涉及CPU寄存器和程序计数器等状态保存和恢复,降低了任务切换消耗

协程

  • 是什么

    • 协程是一种运行在用户态的轻量级线程,多个协程可以并发运行在同一个线程上。
  • 为什么

    • 通过协程可以解决线程阻塞问题,使得单线程可以管理多个任务的执行,比多线程实现更高效。
  • 怎么做

    • 协程任务切换时不需要像线程一样根据操作系统进行上下文切换,而是由应用程序内部调度,任务切换开销很小,效率很高

进程切换流程

  • 操作系统会将当前进程的状态信息(如程序计数器、用户/内核寄存器值等) 保存到进程控制块(PCB)中。

    • 进程控制块(PCB)是操作系统为每个进程都维护的一个数据结构,它包含了该进程的状态信息。由操作系统内核管理
  • 操作系统将CPU从用户态切换到内核态

  • CPU根据时间片轮转算法从就绪队列中选取下一个可运行进程。

  • 恢复新进程的上下文环境,如恢复进程标识符、地址空间、文件信息等。

  • 更新程序计数器和恢复寄存器内容。

  • 操作系统将CPU从内核态切换回用户态,开始执行新进程。

线程切换流程

  • 操作系统先将当前线程的信息保存到线程控制块(TCB)。
  • 选择下一个就绪线程进来执行。
  • 将新线程的CPU状态信息(如程序计数器、寄存器值)装入CPU。
  • 新线程开始在原进程的地址空间中执行。

协程切换流程

  • 当前执行的协程主动让出控制权。
  • 应用程序通过调用库函数实现协程上下文保存和恢复。
  • 将CPU寄存器上下文保存在协程控制块中。
  • 从就绪协程队列中选取新的协程恢复上下文。
  • 将新协程的CPU状态加载到寄存器,恢复执行。

三者切换流程的区别在于:

  • 进程切换涉及地址空间转换,
  • 线程和协程仅修改CPU状态实现切换,
  • 但协程切换完全在用户层通过库函数实现,开销更低。