Python为什么要切换线程?

时间:2019-01-18 15:21:06

标签: python multithreading python-multithreading gil

在关于线程和GIL的Python documentation中,它说:

  

为了模拟执行的并发性,解释器会定期尝试切换线程(请参见sys.setswitchinterval()

为什么要这样做?这些上下文切换似乎只不过是在浪费时间。在每个进程释放GIL之后再运行下一个进程会更快吗?

1 个答案:

答案 0 :(得分:2)

线程不必具有任何I / O。您可以让一个线程进行数字运算,另一线程处理I / O。建议中的数字运算线程永远不会删除GIL,因此另一个线程可以处理I / O。

为确保每个线程都能运行,如果由于等待I / O之前未这样做,则默认情况下,线程会在5毫秒(Python 3)之后丢弃GIL

您可以使用sys.setswitchinterval()更改此间隔。

线程是一种简单的并发技术。要获得更高效的并发技术,请查看asyncio,它使用协程提供单线程并发。