我有一个“我只是想理解它”的问题。首先,我在Ubuntu上使用Python 2.6.5。
在Python中,线程(通过thread模块)只是“线程”,它只是告诉GIL在一定时间内运行每个“线程”的代码块等等,实际上没有真正的线程。
因此,问题是 - 如果我在一个线程中有一个阻塞套接字,并且现在我发送数据并阻塞该线程约5秒钟。我期望会阻塞整个程序,因为它是一个C命令(sock.send)导致该线程阻塞。但是我惊讶地发现主线程继续运行。
那么问题是 - GIL如何能够在达到像send这样的阻塞命令后继续运行其余代码?难道这里不需要使用真正的线程吗?
谢谢。
在Python中,线程(通过thread模块)只是“线程”,它只是告诉GIL在一定时间内运行每个“线程”的代码块等等,实际上没有真正的线程。
因此,问题是 - 如果我在一个线程中有一个阻塞套接字,并且现在我发送数据并阻塞该线程约5秒钟。我期望会阻塞整个程序,因为它是一个C命令(sock.send)导致该线程阻塞。但是我惊讶地发现主线程继续运行。
那么问题是 - GIL如何能够在达到像send这样的阻塞命令后继续运行其余代码?难道这里不需要使用真正的线程吗?
谢谢。