进程 线程 协程 的关系 比较

进程 线程 协程 三者之间比较

进程:

1. 进程是系统进行资源分配和调度的⼀个独立单位. 一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”。

2.进程一般由程序、数据集、进程控制块三部分组成

2.1程序用来描述进程要完成哪些功能以及如何完成;
2.2数据集则是程序在执行过程中所需要使用的资源;
2.3进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志

3.进程的局限是创建、撤销和切换的开销比较大

线程:

1.线程是进程的⼀个实体, 也叫轻量级进程,是CPU调度和分派的基本单位,

2.线程是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有⼀点在运行中必不可少的资源(如程序计数器,⼀组寄存器和栈),但是它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源

协成:

协程,又称微线程,纤程(Coroutine)
协程是一个线程执行,但执行有点像多线程
协程执行过程中,在协程内部可中断,然后转而执行别的协程,在适当的时候再返回来接着执行。协程之间不是调用者与被调用者的关系,而是彼此对称、平等的,通过相互协作共同完成任务。
协程的执行效率极高。
因为协程切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。不需要多线程的锁机制
因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
简单点说协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态
Python对用在generator中的yield可以一定程度上实现协程。通过yield方式转移执行权。
一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程(资源比进程少), 使得多线程程序的并发性高。
进程在执行过程中拥有独立的内存单元, 而多个线程共享内存, 从而极大地提高了程序的运行效率
线线程不能够独立执行, 必须依存在进程中
线程属于内核级别的,即由操作系统控制调度
协程,应用程序级别(而非操作系统)控制切换,以此来提升效率
协程执行过程中,在协程内部可中断,然后转而执行别的协程,在适当的时候再返回来接着执行。协程之间不是调用者与被调用者的关系,而是彼此对称、平等的,通过相互协作共同完成任务。

你可能感兴趣的:(进程 线程 协程 的关系 比较)