1

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

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

4

1 回答 1

0

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

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

这种机制的高 I/O 性能,消除了任何轮询或检查,是 99% 的原因可以忍受先发制人的多任务处理程序的痛苦。

于 2013-03-26T21:04:37.727 回答