如何等待I / O或等待锁定被释放?

时间:2013-03-26 19:02:31

标签: python multithreading io

我很好奇。我已经用Python编程多年了。当我运行阻止I / O的命令(无论是硬盘读取还是网络请求),或者在等待锁定释放时阻塞,这是如何实现的?线程如何知道何时重新获取GIL并再次开始运行?

我想知道这是否是通过不断检查来实现的(“现在是输出吗?现在在这里吗?现在怎么样?”)我认为这是浪费,或者以更优雅的方式。

1 个答案:

答案 0 :(得分:0)

无需重复检查I / O完成情况或锁定释放情况。

I / O完成,由驱动程序的硬件中断发出信号,或者由来自另一个线程的软件中断发出信号的锁定释放,将使线程等待这些操作立即“准备”,并且很可能正在运行,并且很可能在运行时抢占另一个线程。基本上,在软件或硬件中断之后,操作系统可以决定中断 - 返回与中断的线程不同的线程。

这种机制的高I / O性能,消除了任何轮询或检查,是忍受预防性多任务者痛苦的99%的原因。