84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
最近看书上写的,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请求。
密集计算,瓶颈在于cup给这个计算的时间片和cpu能跑多快上,这时候一般通过多核并行处理,以及增加该计算的CUP时间片来达到加速计算。这时候python的多线程没什么卵用。反而会拖慢计算,因为进程的切换也是需要时间的。这部分时间就浪费了。
而IO计算。瓶颈在于你一个请求发送出去的等待时间,一般走internet的tcp请求怎么也要100毫秒,而单进程,时间就白白浪费在等待这个网络传输时延上面了。而多进程通过一次发出多个请求来缩短等待时间,比如你有10个请求跑去每个请求网络等待时间100ms处理10ms那么单线程需要1100ms,而多进程同时发出10个请求,基本算同时发出 都等待100ms然后处理虽说是多进程但是因为同时只有一个运行基本算100ms那么总共就200ms当你同时并发的连接熟练越多时候效率越高
因为Python有一把超大的线程锁GIL,使得同一时刻只有一个Python线程在运行。
为什么还使用并发编程呢?
因为你需要除了使用CPU之外,Python线程还需要使用磁盘IO,网络IO的资源;
一个线程被IO阻塞了,其他线程可以切换过来干活,线程切换粒度更小;
多个线程之间可以协同完成共同任务
多线程之间共享数据方便