如何在Python中调度线程(和异步任务)?

2024-04-26 08:13:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解Python中的并发性,但对线程的调度方式和任务(在asyncio库中)的运行/等待调度方式感到困惑。你知道吗

假设一个线程试图获取一个锁并被阻塞。Python解释器是否立即将该线程放入“阻塞”队列?这个被阻塞的线程是如何回到运行状态的?有人在忙着等吗?你知道吗

当asyncio库中的任务(相当于线程)在异步互斥锁上被阻塞时,这有什么不同?你知道吗

如果在上述两种情况中都没有繁忙的等待,那么asyncio的优势是什么?你知道吗


Tags: asyncio队列状态方式情况调度线程解释器
1条回答
网友
1楼 · 发布于 2024-04-26 08:13:43

Suppose a thread tries to acquire a Lock and is blocked. Does the Python interpreter immediately put that thread into the 'blocked' queue?

Python创建真正的操作系统线程,因此不需要解释器进行排队或调度。你知道吗

一个可能的例外是解释器使用global lock序列化Python代码的执行和对Python对象的访问。此锁不仅在获取线程锁之前释放,而且在任何(可能的)阻塞操作(如从IO句柄读取或休眠)之前释放。你知道吗

What is the advantage of asyncio, if there is no busy waiting involved in either of the above two cases?

优点是asyncio不需要为它并行执行的每个协程都使用一个新的OS线程。操作系统线程非常昂贵,异步任务非常轻量级。另外,asyncio使潜在的开关点可见(关键字await),因此竞争条件的可能性较小。你知道吗

您可以将asyncio视为Twisted的继承者,但是使用现代API,并使用可挂起的协同路由而不是显式回调链。你知道吗

相关问题 更多 >