首页   快速返回

进程线程与协程的区别     所属分类 linux
进程 可以简单理解为 正在执行的程序 是系统进行资源分配和调度的独立单位
每个进程都有自己的独立内存空间 , 进程上下文切换开销比较大 ,但相对比较稳定安全

线程也叫轻量级进程,是一个基本的CPU执行单元,是程序执行过程中的最小单元。
线程由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程。 
线程间通信主要通过共享内存,上下文切换很快,资源开销较少
一个jvm进程里可以运行多个线程


协程是一种用户态的轻量级线程,又称微线程,英文名Coroutine,协程的调度完全由用户控制。
协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到指定的地方,
切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,
可以不加锁访问全局变量,所以上下文的切换非常快。


协程的特点在于是一个线程执行,与多线程相比

协程的执行效率非常高,子程序切换由程序自身控制,没有线程切换的开销
协程不需要多线程的锁机制,在协程中控制共享资源不加锁,只需要判断状态

进程是资源单位,线程是执行单位,对于执行单位来说,有三种运行状态:运行,阻塞,就绪
如果IO阻塞,会被夺走cpu的执行权限,线程会一直等到阻塞结束,然后进入就绪态,才有可能被重新调度,进入运行态。

线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:
1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3) 线程是处理器调度的基本单位,但进程不是
4) 二者均可并发执行
5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

 
协程多与线程进行比较

1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
2) 线程进程都是同步机制,而协程则是异步
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态


开辟一个协程大概需要5k空间,开辟一个线程需要512k空间, 开辟一个进程占用资源最多

上一篇     下一篇
java线程状态

互联网新老词汇对照表

NoClassDefFoundError和ClassNotFoundException异常的区别

ExecutorService中submit和execute的区别

java thread join实现原理

java线程池shutdown和shutdownNow的区别