time.sleep 对线程访问的影响
Effect of time.sleep on thread access
在python中,我有一个访问全局对象的多线程应用程序。我很好奇,如果我将 time.sleep() 放在即将访问全局对象的线程(比如线程 1)上,time.sleep() 是否会延迟线程 1 对全局对象的访问,从而使其他线程没有 time.sleep() 能够首先访问全局对象?
线程在Python中相当复杂,并且在同一个内存堆中运行。线程基本上 运行 并发,即多个线程交错在一起,这样一次只能在 运行 上,并且它们在很短的时间跨度内交替 运行 (考虑到它们需要访问口译员)。
当您让一个线程进入睡眠状态时,它基本上会使用底层系统睡眠功能并阻止对其进行的所有操作。但是,其他线程肯定是可操作的。因此,当您说 THREAD1 在即将访问全局变量之前进入睡眠状态时,其他线程显然会使用该变量,因为它们是 运行ning 而 THREAD1 不是。
THREAD1一醒来,如果需要,就获取GIL,从而访问全局变量。由于它再次与其他线程交错,由于并发性,它在激活时立即访问全局变量。如果其他线程正在使用它,它们会在 THREAD1 开始操作之前放弃访问权限。
在python中,我有一个访问全局对象的多线程应用程序。我很好奇,如果我将 time.sleep() 放在即将访问全局对象的线程(比如线程 1)上,time.sleep() 是否会延迟线程 1 对全局对象的访问,从而使其他线程没有 time.sleep() 能够首先访问全局对象?
线程在Python中相当复杂,并且在同一个内存堆中运行。线程基本上 运行 并发,即多个线程交错在一起,这样一次只能在 运行 上,并且它们在很短的时间跨度内交替 运行 (考虑到它们需要访问口译员)。
当您让一个线程进入睡眠状态时,它基本上会使用底层系统睡眠功能并阻止对其进行的所有操作。但是,其他线程肯定是可操作的。因此,当您说 THREAD1 在即将访问全局变量之前进入睡眠状态时,其他线程显然会使用该变量,因为它们是 运行ning 而 THREAD1 不是。
THREAD1一醒来,如果需要,就获取GIL,从而访问全局变量。由于它再次与其他线程交错,由于并发性,它在激活时立即访问全局变量。如果其他线程正在使用它,它们会在 THREAD1 开始操作之前放弃访问权限。