程序、进程、线程、协程

80 阅读2分钟

理论知识:

  1. 程序(Program) :程序是指一组为完成特定任务而编写的计算机可执行的指令集合。它是静态的,存在于存储介质中,比如硬盘。程序在被执行前,只是一段死的代码。
  2. 进程(Process) :进程可以看作是程序(包括数据和代码)在处理器上的一次执行过程,它是动态的。每个进程都有自己的独立内存空间,和其他进程相互隔离。进程的运行包括创建、调度和消亡等过程。
  3. 线程(Thread) :线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。同一个进程内的多个线程将共享同一片内存空间,但每个线程有自己独立的运行栈和程序计数器(PC)。
  4. 协程(Coroutine) :协程是一种比线程更轻量级的存在,有时也被称为轻量级线程、微线程。协程不是由操作系统内核管理调度,而是完全由程序自行管理。一个线程可以包含多个协程,多个协程可以并发(非并行)执行。协程的优势在于可以避免大量的系统切换带来的开销,简化了异步编程。

总结一下,程序是静态的代码和数据,进程是程序在操作系统中的一次动态执行过程,线程是进程中的一个执行单元,而协程则是在单线程中实现"同时"执行的一种机制。

通俗易懂

比如 QQ 这个软件放在硬盘里就是一个程序。那么我们双击运行之后,会启动一个进程来运行这个程序,在一个进程中又有多个线程,每个线程干的事情不一样,比如负责消息的接收的,负责用户列表状态管理的。那么协程呢,据我所知目前 Golang 用的就是协程,更轻量的线程。区别在于线程由CPU管理,而协程由程序管理,所以切换开销比较小。

结束

本人正在学习Java,遇到的一些知识点会以自己的理解记录下来,供大家参考,如果发现有问题,麻烦提醒,谢谢。