当前位置: 首页 > 图灵资讯 > 行业资讯> Python如何进行线程切换

Python如何进行线程切换

发布时间:2025-11-02 16:21:07

线程切换

条件对象允许一个线程 A 停下来,等待其他线程 B ,线程 B 满足某一条件后,通知(notify)线程 A 继续运行。线程首先获得条件变量锁。如果条件不足,线程将等待(wait)并释放条件变量锁。如果满足,执行线程也可以通知其他状态 wait 线程。其他地方 wait 接到通知后,状态线程将重新判断条件。

无论是多流程还是多线程,只要数量多,效率肯定不会提高。为什么?

我们举个例子,假设你不幸正在准备高中入学考试,你需要每晚做中文、数学、英语、物理和化学,每个作业需要1个小时。

如果你先花一个小时做语文作业,然后花一个小时做数学作业,这样你就可以依次完成它们,总共花5个小时。这种方法称为单任务模型或批处理任务模型。

假设你打算切换到多任务模型,你可以先做1分钟的汉语,然后切换到数学作业,做1分钟,然后切换到英语,等等,只要切换速度足够快,这样和单核CPU执行多任务是一样的,从幼儿园孩子的角度来看,你同时写5个家庭作业。

然而,切换操作是有成本的。例如,从汉语到数学,首先清理桌子上的中文书籍和笔(这被称为保存场地),然后打开数学教科书,找到一个圆形的尺子(这被称为准备一个新的环境),然后开始做数学作业。操作系统在切换过程或线程中也是如此。它需要保存当前的现场环境(CPU寄存器状态、内存页面等),然后准备新任务的执行环境(恢复最后一个寄存器状态、切换内存页面等)。开始执行。虽然切换过程非常快,但它也需要时间。如果同时执行数千项任务,操作系统可能主要忙于切换任务,没有太多时间执行任务。在这种情况下,最常见的是硬盘响应,点窗口没有响应,系统处于假死状态。

因此,一旦多个任务达到一定程度,系统的所有资源都将被消耗掉。因此,效率急剧下降,所有任务都做不好。

相关推荐:Python视频教程

以下是一个有趣的例子

importthreading
classBoy(threading.Thread):
def__init__(self,cond,name):
super(Boy,self).__init__()
self.cond=cond
self.name=name
defrun(self):
self.cond.acquire()
print(self.name+":嫁给我吧!?")
self.cond.notify()#唤醒挂起的线程,让hanmeimei表态
self.cond.wait()#释放内部占用的琐事,同时挂起线程,直到收到通知后醒来或加班,等待hanmeimei回答。
print(self.name+":我一个人跪下,送戒指!")
self.cond.notify()
self.cond.wait()
print(self.name+":Li太太,你的选择太明治了。")
self.cond.release()
classGirl(threading.Thread):
def__init__(self,cond,name):
super(Girl,self).__init__()
self.cond=cond
self.name=name
defrun(self):
self.cond.acquire()
self.cond.wait()#等待Lilei求婚
print(self.name+":没有情调,不够浪漫,不答应")
self.cond.notify()
self.cond.wait()
print(self.name+":好吧,答应你")
self.cond.notify()
self.cond.release()
cond=threading.Condition()
boy=Boy(cond,"LiLei")
girl=Girl(cond,"HanMeiMei")
girl.start()
boy.start()

运行结果如下:

LiLei:嫁给我吧!??
HanMeiMei:没有情调,不够浪漫,不同意
LiLei:我一个人跪下,送戒指!
HanMeiMei:好吧,答应你
LiLei:Li太太,你的选择太明治了。

相关推荐:

什么是Python中的线程和多线程?

相关文章

Python如何进行线程切换

Python如何进行线程切换

2025-11-02
Python函数关键字参数及用法

Python函数关键字参数及用法

2025-11-02
Python函数的高级用法

Python函数的高级用法

2025-11-02
Python中的协程是什么

Python中的协程是什么

2025-11-02
Python中fock()函数如何使用

Python中fock()函数如何使用

2025-11-02
Python lambda表达式及用法

Python lambda表达式及用法

2025-11-02