美文网首页
Python的解释器是单线程,但不代表开发多线程Python程序

Python的解释器是单线程,但不代表开发多线程Python程序

作者: 欢喜明 | 来源:发表于2018-04-19 16:13 被阅读0次

    先看官方描述:

    In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)

    看这说明,在CPython中,全局解释器锁:GIL是必需存在,因为CPython的内存管理不是线程安全的。

    所以,由于GIL的存在,Python无法利用多处理器的优势,任意时刻只会有一个线程运行在解释器中。也就是大计算量的程序在Python中通过多线程处理并不一定就会变快。

    但是,并不是说,Python就不需要多线程编程了。

    IO密集型程序可以很好地利用多线程,例如Python开发的客户端程序,如果单线程实现,假如发送一个http请求服务器端需要耗费5s来处理,那么客户端程序发送一个请求,发送完成之后,然后就等着,本机CPU也空闲着,在等着服务器返回数据,串行发送1000个就需要5000s左右;但是开1000个线程,就可以同时发送1000个请求(其实不是真的同时,因为在解释器中同一个时刻只有一个线程在运行,只是,开了1000个线程的话,对应1000个请求,程序串行的执行1000个线程,把请求发送出去,那是非常快的,我们在感官上就觉得是同时),然后就一起等待响应,服务器性能好的话,说不定10s之内就能完成1000个请求。

    相关文章

      网友评论

          本文标题:Python的解释器是单线程,但不代表开发多线程Python程序

          本文链接:https://www.haomeiwen.com/subject/vfmwkftx.html