2024-09-28 05:18:35 发布
网友
当我使用两个线程t1和t2从Internet抓取某些内容,并将一些过滤后的数据写入单个文件时,我使用Lock()实例来保证只有一个线程正在写入该文件。我知道当t1.aquire()被调用时,t2.aquire()将t2置于阻塞状态。 我想知道的是,Python解释器中线程t2现在发生了什么。解释器会检查每个时间段的线程状态吗?而且,解释器是控制分配给单个线程的CPU时间,还是主机操作系统?你知道吗
t1
t2
t1.aquire()
t2.aquire()
任何系统调用都不可能中断锁上的acquire()方法。你知道吗
获取()
获取锁定、阻塞或非阻塞。
当在没有参数的情况下调用acquire时(考虑t1):如果这个线程已经拥有锁,则将递归级别增加一级,然后立即返回。 否则,如果另一个线程拥有锁,则阻塞直到锁被解锁。 一旦锁被解锁(不属于任何线程),然后获取所有权,将递归级别设置为1,然后返回。 如果有多个线程在等待锁解锁时被阻塞,那么一次只有一个线程能够获取锁的所有权。在这种情况下没有返回值。你知道吗
这个问题的答案是特定于实现的(也就是说,取决于解释器和操作系统)。在CPython中,每个Python线程都直接映射到一个OS线程,因此调度由OS控制。锁定/解锁也由操作系统处理,而不是由解释器处理。在Jython中,一切都在JVM下运行,JVM还将线程直接映射到本机线程。因此,我不知道Python解释器自己处理调度和锁定的任何实现。你知道吗
任何系统调用都不可能中断锁上的acquire()方法。你知道吗
获取()
获取锁定、阻塞或非阻塞。
当在没有参数的情况下调用acquire时(考虑t1):如果这个线程已经拥有锁,则将递归级别增加一级,然后立即返回。 否则,如果另一个线程拥有锁,则阻塞直到锁被解锁。 一旦锁被解锁(不属于任何线程),然后获取所有权,将递归级别设置为1,然后返回。 如果有多个线程在等待锁解锁时被阻塞,那么一次只有一个线程能够获取锁的所有权。在这种情况下没有返回值。你知道吗
这个问题的答案是特定于实现的(也就是说,取决于解释器和操作系统)。在CPython中,每个Python线程都直接映射到一个OS线程,因此调度由OS控制。锁定/解锁也由操作系统处理,而不是由解释器处理。在Jython中,一切都在JVM下运行,JVM还将线程直接映射到本机线程。因此,我不知道Python解释器自己处理调度和锁定的任何实现。你知道吗
相关问题 更多 >
编程相关推荐