最近看书上写的,python解释器可以“运行”多个线程,但在任一时刻,只有一个线程在运行。
我不理解的是,既然任意时刻只有一个线程在运行,那为什么还是并发编程呢?这样的话两个线程运行的时间总和不还是两个线程的运行时间相加?但是实际上又不是。
请大家帮忙解惑一下,谢谢。
스레드가 IO에 의해 차단되면 다른 스레드가 작업으로 전환될 수 있으며 스레드 전환 세분성은 더 작아집니다.
多线程用途一般分为两种,密集计算和密集IO请求。密集计算,瓶颈在于cup给这个计算的时间片和cpu能跑多快上,这时候一般通过多核并行处理,以及增加该计算的CUP时间片来达到加速计算。这时候python的多线程没什么卵用。反而会拖慢计算,因为进程的切换也是需要时间的。这部分时间就浪费了。而IO计算。瓶颈在于你一个请求发送出去的等待时间,一般走internet的tcp请求怎么也要100毫秒,而单进程,时间就白白浪费在等待这个网络传输时延上面了。而多进程通过一次发出多个请求来缩短等待时间,比如你有10个请求跑去每个请求网络等待时间100ms处理10ms那么单线程需要1100ms,而多进程同时发出10个请求,基本算同时发出 都等待100ms然后处理虽说是多进程但是因为同时只有一个运行基本算100ms那么总共就200ms当你同时并发的连接熟练越多时候效率越高
因为Python有一把超大的线程锁GIL,使得同一时刻只有一个Python线程在运行。
为什么还使用并发编程呢?
因为你需要除了使用CPU之外,Python线程还需要使用磁盘IO,网络IO的资源;
一个线程被IO阻塞了,其他线程可以切换过来干活,线程切换粒度更小;
多个线程之间可以协同完成共同任务
多线程之间共享数据方便
스레드가 IO에 의해 차단되면 다른 스레드가 작업으로 전환될 수 있으며 스레드 전환 세분성은 더 작아집니다.
多线程用途一般分为两种,密集计算和密集IO请求。
密集计算,瓶颈在于cup给这个计算的时间片和cpu能跑多快上,这时候一般通过多核并行处理,以及增加该计算的CUP时间片来达到加速计算。这时候python的多线程没什么卵用。反而会拖慢计算,因为进程的切换也是需要时间的。这部分时间就浪费了。
而IO计算。瓶颈在于你一个请求发送出去的等待时间,一般走internet的tcp请求怎么也要100毫秒,而单进程,时间就白白浪费在等待这个网络传输时延上面了。而多进程通过一次发出多个请求来缩短等待时间,比如你有10个请求跑去每个请求网络等待时间100ms处理10ms那么单线程需要1100ms,而多进程同时发出10个请求,基本算同时发出 都等待100ms然后处理虽说是多进程但是因为同时只有一个运行基本算100ms那么总共就200ms当你同时并发的连接熟练越多时候效率越高
因为Python有一把超大的线程锁GIL,使得同一时刻只有一个Python线程在运行。
为什么还使用并发编程呢?
因为你需要除了使用CPU之外,Python线程还需要使用磁盘IO,网络IO的资源;
一个线程被IO阻塞了,其他线程可以切换过来干活,线程切换粒度更小;
多个线程之间可以协同完成共同任务
多线程之间共享数据方便