検索

ホームページ  >  に質問  >  本文

python多线程?

最近看书上写的,python解释器可以“运行”多个线程,但在任一时刻,只有一个线程在运行。

我不理解的是,既然任意时刻只有一个线程在运行,那为什么还是并发编程呢?这样的话两个线程运行的时间总和不还是两个线程的运行时间相加?但是实际上又不是。

请大家帮忙解惑一下,谢谢。


你的女神你的女神2945日前1338

全員に返信(5)返信します

  • ringa_lee

    ringa_lee2018-01-22 21:43:40

    スレッドが IO によってブロックされた場合、他のスレッドが動作に切り替えることができ、スレッド切り替えの粒度は小さくなります。

    返事
    0
  • 欧阳克

    欧阳克2016-12-06 09:25:53

    多线程用途一般分为两种,密集计算和密集IO请求。
    密集计算,瓶颈在于cup给这个计算的时间片和cpu能跑多快上,这时候一般通过多核并行处理,以及增加该计算的CUP时间片来达到加速计算。这时候python的多线程没什么卵用。反而会拖慢计算,因为进程的切换也是需要时间的。这部分时间就浪费了。
    而IO计算。瓶颈在于你一个请求发送出去的等待时间,一般走internet的tcp请求怎么也要100毫秒,而单进程,时间就白白浪费在等待这个网络传输时延上面了。而多进程通过一次发出多个请求来缩短等待时间,比如你有10个请求跑去每个请求网络等待时间100ms处理10ms那么单线程需要1100ms,而多进程同时发出10个请求,基本算同时发出 都等待100ms然后处理虽说是多进程但是因为同时只有一个运行基本算100ms那么总共就200ms当你同时并发的连接熟练越多时候效率越高

    返事
    0
  • 高洛峰

    高洛峰2016-12-06 09:25:13

    因为Python有一把超大的线程锁GIL,使得同一时刻只有一个Python线程在运行。

    为什么还使用并发编程呢?

    因为你需要除了使用CPU之外,Python线程还需要使用磁盘IO,网络IO的资源;

    一个线程被IO阻塞了,其他线程可以切换过来干活,线程切换粒度更小;

    多个线程之间可以协同完成共同任务

    多线程之间共享数据方便


    返事
    0
  • キャンセル返事