2013-03-26 35 views
1

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

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

+0

我不是Python开发人员,所以请带上一点盐的评论。 I/O执行由操作系统执行,语言运行时只是围绕它执行。 Windows例如总是提供同步I/O操作,但运行时提供了在单独的线程上运行I/O的方法。这些线程本身使用中断来通知数据。类似的事情应该与锁。如果锁定被释放,则检查执行,如果不是,CPU将退回到运行不同线程一段时间的OS调度程序,并返回控制以定期锁定检查代码。 – 2013-03-26 19:23:15

回答

0

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

一个I/O完成,通过硬件中断传递给驱动程序,或者通过另一个线程的软件中断传递锁定释放,将使线程立即“等待”这些操作,并且很可能正在运行,并且很有可能在运行时抢占另一个线程。实质上,在软件或硬件中断之后,操作系统可以决定中断返回到不同于中断的线程。

这个机制的高I/O性能,消除了任何轮询或检查,是承受前置多任务处理器痛苦的99%。