名次解释
1, 进程
进程 (Process) 是计算机中的程序关于某数据集合上的一次运行活动, 是系统进行资源分配和调度的基本单位, 是操作系统 http://baike.baidu.com/view/880.htm 结构的基础. 在早期面向进程设计的计算机结构中, 进程是程序的基本执行实体; 在当代面向线程设计的计算机结构中, 进程是线程的容器. 程序是指令, 数据及其组织形式的描述, 进程是程序的实体.
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动. 它可以申请和拥有系统资源, 是一个动态的概念, 是一个活动的实体. 它不只是程序的代码 http://baike.baidu.com/view/41.htm , 还包括当前的活动, 通过程序计数器 http://baike.baidu.com/view/178145.htm 的值和处理寄存器 http://baike.baidu.com/view/6159.htm 的内容来表示.
进程的概念主要有两点: 第一, 进程是一个实体. 每一个进程都有它自己的地址空间, 一般情况下, 包括文本 http://baike.baidu.com/view/300107.htm 区域 (text region), 数据区域(data region) 和堆栈 http://baike.baidu.com/view/93201.htm (stack region). 文本区域存储处理器执行的代码; 数据区域存储变量和进程执行期间使用的动态分配的内存; 堆栈区域存储着活动过程调用的指令和本地变量. 第二, 进程是一个 "执行中的程序". 程序是一个没有生命的实体, 只有处理 http://baike.baidu.com/view/989420.htm 器赋予程序生命时(操作系统执行之), 它才能成为一个活动的实体, 我们称其为进程 http://baike.baidu.com/view/19746.htm .
2, 线程
线程, 有时被称为轻量级进程(Lightweight Process,LWP), 是程序执行流的最小单元. 一个标准的线程由线程 ID, 当前指令指针 http://baike.baidu.com/view/159417.htm (PC), 寄存器 http://baike.baidu.com/view/6159.htm 集合和堆栈 http://baike.baidu.com/view/93201.htm 组 成. 另外, 线程是进程中的一个实体, 是被系统独立调度和分派的基本单位, 线程自己不拥有系统资源, 只拥有一点儿在运行中必不可少的资源, 但它可与同属一个 进程的其它线程共享进程所拥有的全部资源. 一个线程可以创建和撤消另一个线程, 同一进程中的多个线程之间可以并发执行. 由于线程之间的相互制约, 致使线程 在运行中呈现出间断性. 线程也有就绪 http://baike.baidu.com/view/654230.htm , 阻塞 http://baike.baidu.com/view/497285.htm 和运行 http://baike.baidu.com/view/1026025.htm 三种基本状态. 就绪状态是指线程具备运行的所有条件, 逻辑上可以运行, 在等待处理机; 运行状态是指线程占有处理机正在运行; 阻塞状态是指线程在等待一个事件(如某个信号量), 逻辑上不可执行. 每一个程序都至少有一个线程, 若程序只有一个线程, 那就是程序本身.
线程是程序中一个单一的顺序控制流程. 进程内一个相对独立的, 可调度的执行单元, 是系统独立调度和分派 CPU 的基本单位指运行 http://baike.baidu.com/view/1026025.htm 中的程序的调度单位. 在单个程序中同时运行多个线程完成不同的工作, 称为多线程 http://baike.baidu.com/view/65706.htm .
线程是程序中一个单一的顺序控制流程. 进程内一个相对独立的, 可调度的执行单元, 是系统独立调度和分派 CPU 的基本单位指运行 http://baike.baidu.com/view/1026025.htm 中的程序的调度单位. 在单个程序中同时运行多个线程完成不同的工作, 称为多线程 http://baike.baidu.com/view/65706.htm .
3, 协程
一个程序可以包含多个协程, 可以对比与一个进程包含多个线程, 因而下面我们来比较协程和线程. 我们知道多个线程相对独立, 有自己的上下文, 切换受系统控制; 而协程也相对独立, 有自己的上下文, 但是其切换由自己控制, 由当前协程切换到其他协程由当前协程来控制.
区别与联系
一句话总结
进程: 资源分配的最小单元. 早期面向进程的程序设计中进程是基本执行体; 面向线程的程序设计中, 进程是线程的容器, 线程干活, 每个进程至少有一个线程.
线程: CPU 调度执行的最小单元. 真正干活的. 为了提高 CPU 的利用率和执行多任务.
协程: 可协同执行的线程. 也是干活的. 非系统调度, 协程之间调度.
资源方面
多进程: 子进程和父进程有不同的代码块与资源
多线程: 多个线程公用父进程的资源, 线程自己不拥有资源
多协程: 可以共享上下文
开销和切换成本
进程上下文切换成本很高, 需要寄存很多东西
线程切换成本较低, 占用资源较少
协程是非常轻量级的用户态线程, 程序自己调度, 切换基本没有成本
调度方面
进程是系统调度
线程是系统调度
协程是程序自身实现调度
来源: http://www.bubuko.com/infodetail-2936050.html