time.sleep对线程访问的影响



在python中,我有一个访问全局对象的多线程应用程序。我很好奇,如果我把time.sleep()放在一个即将访问全局对象的线程(比如thread 1)上,time.sleen()是否会延迟thread 2对全局对象的访问,从而使其他没有time.slee()的线程能够首先访问全局对象?

线程在Python中非常复杂,并且在同一内存堆中操作。线程基本上是并发运行的,即多个线程交错在一起,这样一次只运行一次,它们在很短的时间内交替运行(考虑到它们需要访问解释器)。

当你让一个线程进入睡眠状态时,它基本上使用了底层的系统睡眠功能,并阻止了对它的所有操作。然而,其他线程肯定是可操作的。因此,当您说THREAD1在即将访问全局变量之前处于睡眠状态时,其他线程显然会使用该变量,因为它们正在运行,而THREAD1没有。

THREAD1一旦唤醒,如果需要,它将获取GIL,从而访问全局变量。由于它再次与其他线程交错,因此由于并发性,它在激活时可以立即访问全局变量。如果其他线程正在使用它,那么在THREAD1开始操作之前,它们就会放弃访问权限。

最新更新