zoukankan      html  css  js  c++  java
  • 协程.线程和进程的补充

    线程: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操作时,适应于协程。

  • 相关阅读:
    软件项目的需求变更管理
    便利店规模经营的条件是什么?
    店长不得不知的七类非语言沟通方式
    软件项目管理的十大定律
    零售业精细化管理必须做好三大源头
    超市货架陈列暗藏玄机 最新鲜的藏在最后面
    超市陈列原则
    店铺中货架的装修设计要点
    《图解Java多线程设计模式》之五:Balking 模式
    《图解Java多线程设计模式》之三:Immutable 模式
  • 原文地址:https://www.cnblogs.com/jacky912/p/10265781.html
Copyright © 2011-2022 走看看