概念
- 进程
程序在数据集上的一次动态执行过程。
进程是分配计算机资源的最小单元,拥有独立的地址空间。
- 线程
进程的一个执行流程。
线程是程序运行时的最小单元,cup真正运行的是线程。
- 协程
一种特殊的代码流,是编译器级别的一种概念,作为线程上层的抽象。
实际上,协程与进程、线程不是一个维度上的概念。
-
进程、线程一般是系统空间下的概念,一般由操作系统提供实现;
-
协程则是用户空间下的概念,由编译器级或用户编程实现。
进程、线程、协程对比
进程 | 线程 | 协程 | |
---|---|---|---|
所属空间 | 系统空间 | 系统空间 | 用户空间 |
调度者 | 操作系统 | 操作系统 | 编译器/编码 |
依赖 | 程序、数据、系统资源 | 进程 | 线程 |
独立的计算机资源 | 拥有 | 不拥有 | 不拥有 |
主要目的 | 提高系统的资源利用率和增加系统的吞吐量 | 提高系统并发性能。对于IO消耗型进程而言,多线程会极大提高CPU利用率。 | 节少并发系统的开销。由用户替换调度系统级的资源调度和上下文切换,节省CPU的切换开销。 |
关系 | 拥有 n ≥ 1 个线程 | 一个只属于一个进程,但可以包含多个协程 | - |
使用方法 | 所有应用程序运行时都是一个进程。 | 一般的开发语言都支持多线程开发,但运行时需要操作系统支持多线程 | python支持协程,可以直接使用;java等语言目前不支持,但是可以使用现有框架实现或者利用状态机、事件驱动等方法自己编程实现 |