协程.线程和进程的补充

线程:threading提供线程相关的操作。线程是应用程序工作的做小单位,它包含在进程中,是进程中的实际运行单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程并执行不同的任务。

   threading模块建立在-thread之上,thread以低级的最原始的方式来处理控制线程,而threading模块通过对-thread二次封装,提供了更方便的api来处理线程。

线程锁:我们使用线程对数据进行操作的时候,如果多个线程同时修改某个数据的时候,可能会出现多个不同的预料结果,为了保证数据的准确性,引入了锁的概念。

threading.Rlock与threading.Lock的区别:

Rlock允许在同一线程中被多次acquire。而Lock却不允许这样,如果使用Rlock,那么acquire和release必须成对出现,即调用了n次acquire必须调用n次release才能释放所占用的锁。

threading.Event

Event是线程间通讯最直接的机制之一。一个线程发送一个Event信号,则其他线程等待这个信号。用于主线程控制其它线程的执行。Event管理一个flag,这个flag可以使用set()设置成ture()或者使用clear()重置为false。

wait()这用于阻塞,在flag为ture之前,flag默认为false

threading.Condition

Python提供的condition对象提供了对复杂线程同步问题的支持。condition被称为条件变量,除了提供与lock类似acquire和release方法外,还提供了wait和notify方法。线程首先acquire一个条件变量,然后判断一些条件。

如果条件不满足则wait,如果条件满足进行一些处理改变条件后,通过notify方法通知其它线程,其它处于wait状态的线程接到通知后会重新判断条件,不断的重复这一过程,从而解决复杂的同步问题。

在典型的设计风格里,利用condition变量锁去访问一些共享状态,线程在获取到它想得到的状态前,会反复调用wait()。修改状态的线程在他们状态改变时调用notify()活notify-all(),用这种方式,线程会尽可能的获

取到想要的一个等待者的状态。

数据共享:不同进程之间是不能数据共享的,想要共享用以下方法

当创建进程时,共享数据会被拿到子进程去,当进程中执行完毕后,再赋值给原值。

进程池

协程:协程又叫微线程,从技术的角度来讲,“协程就是你可以暂停执行的函数”,可以把它理解成像生成器一样。线程和进程的操作是由程序触发系统接口,最后的执行者是系统,协程的操作则是程序员。

协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换需要耗时(保存状态,下次继续)。协程只需要一个线程,在一个线程中规定某个代码块执行顺序。

协程的适应场景:当程序中存在大量不需要的CPU操作时,适应于协程。

原文地址:https://www.cnblogs.com/jacky912/p/10265781.html