Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何实现等待I/O或等待释放锁?_Python_Multithreading_Io - Fatal编程技术网

Python 如何实现等待I/O或等待释放锁?

Python 如何实现等待I/O或等待释放锁?,python,multithreading,io,Python,Multithreading,Io,我很好奇。我已经用Python编程多年了。当我运行命令阻塞I/O时,无论是硬盘读取还是网络请求,还是在等待释放锁时阻塞,这是如何实现的?线程如何知道何时重新获取GIL并重新开始运行 我想知道这是否是通过不断检查现在的输出来实现的?现在在这里吗?现在呢?我认为这是浪费,或者以更优雅的方式。无需反复检查I/O完成或锁释放 由硬件中断向驱动程序发出的I/O完成信号,或由另一个线程的软件中断发出的锁释放信号,将使等待这些操作的线程“立即”准备就绪,并且很可能正在运行,并且很可能在运行时抢占另一个线程。本

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


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

无需反复检查I/O完成或锁释放

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


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

我不是Python开发人员,所以对这一评论持保留态度。I/O执行是由操作系统执行的,而语言运行时只是围绕这一点。例如,Windows总是提供同步I/O操作,但运行时提供在不同线程上运行I/O的方法。这些线程本身通过中断被告知数据。类似的事情也应该发生在锁上。检查是否释放了锁,若未释放,CPU将返回到OS调度程序,该调度程序在一段时间内运行不同的线程,并定期将控制返回到锁检查代码。