Python进行线程切换的方法

  介绍

这篇文章主要介绍Python进行线程切换的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>线程切换

条件对象能让一个线程一停下来,等待其他线程B线程B满足了某个条件后通知(通知)线程一个继续运行。线程首先获取一个条件变量锁,如果条件不足,则该线程等待(等)并释放条件变量锁,如果满足就执行线程,也可以通知其他状态为等待的线程。其他处于等待状态的线程接到通知后会重新判断条件。

无论是多进程还是多线程,只要数量一多,效率肯定上不去,为什么呢?我们打个比方,假设你不幸正在准备中考,每天晚上需要做语文、数学,英语,物理、化学这五科的作业,每项作业耗时1小时。

如果你先花1小时做语文作业,做完了,再花1小时做数学作业,这样,依次全部做完,一共花5小时,这种方式称为单任务模型,或者批处理任务模型。

假设你打算切换到多任务模型,可以先做1分钟语文,再切换到数学作业,做1分钟,再切换到英语,以此类推,只要切换速度足够快,这种方式就和单CPU核执行多任务是一样的了,以幼儿园小朋友的眼光来看,你就正在同时写5科作业。

但是,切换作业是有代价的,比如从语文切到数学,要先收拾桌子上的语文书本,钢笔(这叫保存现场),然后,打开数学课本,找出圆规直尺(这叫准备新环境),才能开始做数学作业。操作系统在切换进程或者线程时也是一样的,它需要先保存当前执行的现场环境(CPU寄存器状态,内存页等),然后,把新任务的执行环境准备好(恢复上次的寄存器状态,切换内存页等),才能开始执行。这个切换过程虽然很快,但是也需要耗费时间。如果有几千个任务同时进行,操作系统可能就主要忙着切换任务,根本没有多少时间去执行任务了,这种情况最常见的就是硬盘狂响,点窗口无反应,系统处于假死状态。

所以,多任务一旦多到一个限度,就会消耗掉系统所有的资源,结果效率急剧下降,所有任务都做不好。

下面为一个有趣的例子

import 线程   class 男孩(threading.Thread):   ,,,def  __init__(自我,,气孔导度,,名字):   ,,,,,,,超级(男孩,,自我). __init__ ()   ,,,,,,,self.cond =电导率   ,,,,,,,self.name =,名字   ,,,def 运行(自我):   ,,,,,,,self.cond.acquire ()   ,,,,,,,印刷(时间+ self.name “:嫁给我吧! ?“)   ,,,,,,,self.cond.notify(),, #,唤醒一个挂起的线程,让hanmeimei表态   ,,,,,,,self.cond.wait(),, #,释放内部所占用的琐,同时线程被挂起,直至接收到通知被唤醒或超时,等待hanmeimei回答   ,,,,,,,印刷(时间+ self.name “:我单下跪,送上戒指!“)   ,,,,,,,self.cond.notify ()   ,,,,,,,self.cond.wait ()   ,,,,,,,印刷(时间+ self.name “:李太太,你的选择太明治了!”)   ,,,,,,,self.cond.release ()   class 女生(threading.Thread):   ,,,def  __init__(自我,,气孔导度,,名字):   ,,,,,,,超级(女孩,,自我). __init__ ()   ,,,,,,,self.cond =电导率   ,,,,,,,self.name =,名字   ,,,def 运行(自我):   ,,,,,,,self.cond.acquire ()   ,,,,,,,self.cond.wait(),, #,等待李雷求婚   ,,,,,,,印刷(时间+ self.name “:没有情调,不够浪漫,不答应“)   ,,,,,,,self.cond.notify ()   ,,,,,,,self.cond.wait ()   ,,,,,,,印刷(时间+ self.name “:好吧,答应你了“)   ,,,,,,,self.cond.notify ()   ,,,,,,,self.cond.release ()   时间=cond  threading.Condition ()   boy =,男孩(气孔导度,“LiLei")   时间=girl 女孩(气孔导度,“HanMeiMei")   girl.start ()   boy.start ()

运行结果如下:

李雷:,嫁给我吧! ?   HanMeiMei:没有情调,不够浪漫,不答应   李雷:我单下跪,送上戒指!   HanMeiMei:好吧,答应你了   李雷:李太太,你的选择太明治了。

以上是Python进行线程切换的方法的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

Python进行线程切换的方法