线程 进程 协程

一、什么是线程?

  线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

  一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程的中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。由于线程之间的互相制约,致使线程在运行中呈现出间断性。线程也有就绪,阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,如程序只有一个线程,那就是程序本身。

  线程是程序中一个单一的顺序控制流程。进程内一个相对独立的,可调度的执行单元。是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单一程序中 同时运行多个线程完成不同的工作,称为多线程。

二、什么是进程?

  进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机机构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令,数据及其组织形式的描述,进程是程序的实体。里面包含对各种资源的调用,内存的管理,网络接口的调用等。

三、什么是协程?

  协程,又称微线程,纤程。英文名Coroutine。

  协程看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回执行之前的子程序,但是它的相关信息还是之前的。

  说明:协程适合处理的是I/O密集型任务,处理CPU密集型任务并不是它的长处,如果要提升CPU利用率可以考虑“多进程+协程”的模式。

四、线程与进程的区别

  1、线程共享内存空间,进程的内存是独立的

  2、同一个进程的线程之间可以直接交流,两个进程想通信,必须通过一个中间代理来实现。

  3、创建新线程很简单,创建新进程需要对其父进程进行一次克隆。

  4、一个线程可以控制和操作同一进程的其他进程,但是进程只能操作子进程。

  5、改变主线程可能会影响其他线程,改变父进程,不影响子进程。

五、协程与线程的区别

  1、协程与线程相比有极高的执行效率。因为子程序切换不是线程切换,而是由程序本身控制。因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就明显。

  2、协程不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好。

  3、因为协程是一个线程执行,那么怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

猜你喜欢

转载自www.cnblogs.com/xushuhai/p/9282348.html