这是一段Python异步编程代码。
async def my_task(task_id):
print(f"Task {task_id} started, waiting for 2 seconds...")
await asyncio.sleep(2)
print(f"Task {task_id} finished.")
async def main():
tasks = [my_task(i) for i in range(3)]
await asyncio.gather(*tasks)
asyncio.run(main())
当三个my_task任务都处于睡眠状态时,从操作系统的角度来看,Python线程是处于就绪状态、阻塞状态还是运行状态?
如果Python线程正在“就绪”状态和“运行”状态之间切换,这是否意味着Python线程正在不断轮询这3个任务是否已经完成等待?如果真是这样的话,那不是浪费CPU资源吗?或者有什么机制可以解决这个问题吗?
我想知道我应该理解哪些概念才能掌握异步编程的原理。
当三个my_task任务都处于睡眠状态时,从 从操作系统的角度来看,Python线程是处于就绪状态的 状态,阻塞状态,还是运行状态?它在 select(或 poll、epoll 等,具体取决于操作系统)调用中被阻塞并超时(
链接到源代码),或者如果它还有其他任务要做,它将执行它们。
这是否意味着Python线程不断地轮询这3个 任务已经完成等待了吗?没有。