进程,线程,协程的区别和联系
进程
是并发执行的程序在执行过程中分配和管理资源的基本单位,每一个进程都有自己的地址空间,即进程空间或(虚空间)
进程空间的大小只与处理机的位数有关,一个16位处理机的进程空间大小为216,而32位处理机的进程空间处理机大小为232。
进程至少有5种基本状态:初始态、执行态、等待状态、就绪状态、终止状态。
线程
线程是进程的一部分,一个没有线程的进程可以被看做是单线程。线程有时又被看做轻权进程或者轻量级进程,也是CPU调度的一个基本单位。
共享进程的地址空间,全局变量(数据和堆)。在一个进程中,各个线程共享堆区,而进程中的线程各自维持自己的栈。
线程是指一个进程内的执行单元,也是进程内的可调度实体。
与进程的区别:
- 地址空间:进程内的一个执行单位;进程至少有一个线程;它们共享进程的地址空间;而进程有独立的地址空间。
- 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源。
- 线程是处理器调度的基本单位,但线程不是。
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
协程
协程,是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。
子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。
注意:协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行。
协程的特点在于是一个线程执行,那和多线程比,协程有何优势?
- 极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显;
- 不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。