【发布时间】:2013-03-26 19:02:31
【问题描述】:
我很好奇。我已经用 Python 编程多年了。当我运行一个阻塞 I/O 的命令(无论是硬盘读取还是网络请求),或者在等待释放锁时阻塞,这是如何实现的?线程如何知道何时重新获取 GIL 并重新开始运行?
我想知道这是否是通过不断检查(“输出现在在这里吗?现在在这里吗?现在呢?”)来实现的,我认为这很浪费,或者以更优雅的方式。
【问题讨论】:
-
我不是 Python 开发人员,所以请对这条评论持保留态度。 I/O 执行是由操作系统执行的,而语言运行时只是围绕它进行的。例如,Windows 总是提供同步 I/O 操作,但运行时提供在不同线程上运行 I/O 的方法。这些线程本身使用中断通知数据。类似的事情应该是锁。检查是否释放锁,如果没有释放 CPU,则将 CPU 交还给运行不同线程一段时间的 OS 调度程序,并定期将控制权返回给锁检查代码。
标签: python multithreading io