首页 未命名正文

linux编程_历程和线程、协程的区别

云返利网 未命名 2020-05-26 09:06:16 17 0

  现在多历程多线程已经是老生常谈了,协程也在最近几年流行起来。python中也有协程库,tornado中也用了gevent封装好的协程。本文主要先容历程、线程和协程三者之间的区别。

一、观点

  1、历程

历程是具有一定自力功效的程序关于某个数据集合上的一次运行流动,历程是系统举行资源分配和调剂的一个自力单元。每个历程都有自己的自力内存空间,差别历程通过历程间通讯来通讯。由于历程对照重量,占有自力的内存,以是上下文历程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)对照大,但相对对照稳固平安。

  2、线程

线程是历程的一个实体,是CPU调剂和分配的基本单元,它是比历程更小的能自力运行的基本单元.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),然则它可与同属一个历程的其他的线程共享历程所拥有的所有资源。线程间通讯主要通过共享内存,上下文切换很快,资源开销较少,但相比历程不够稳固容易丢失数据。

  3、协程

协程是一种用户态的轻量级线程,协程的调剂完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调剂切换时,将寄存器上下文和栈保留到其他地方,在切回来的时刻,恢复先前保留的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的接见全局变量,以是上下文的切换非常快。

二、区别:

  1、历程多与线程对照

线程是指历程内的一个执行单元,也是历程内的可调剂实体。线程与历程的区别:

1) 地址空间:线程是历程内的一个执行单元,历程内至少有一个线程,它们共享历程的地址空间,而历程有自己自力的地址空间

2) 资源拥有:历程是资源分配和拥有的单元,同一个历程内的线程共享历程的资源

3) 线程是处理器调剂的基本单元,但历程不是

4) 二者均可并发执行

5) 每个自力的线程有一个程序运行的入口、顺序执行序列和程序的出口,然则线程不能够自力执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

  2、协程多与线程举行对照

1) 一个线程可以多个协程,一个历程也可以单独拥有多个协程,这样python中则能使用多核CPU。

2) 线程历程都是同步机制,而协程则是异步

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)