首先我们来简述一下并发的优缺点
并发的优点:
要把100M 数据写入磁盘,CPU 计算的时间只需要0.01s,可是磁盘接受这100M 数据却需要10s,
怎么办呢?有两种办法
1、第一种办法是 CPU 等着,也就是程序暂停执行后续代码,直到磁盘写入数据完成再继续往下执行
import threading
import time
start_time=time.time()
def foo(str):
print(str)
time.sleep(2)
foo('磁盘接受100M数据')
foo('数据接受完毕,cpu去做其他事情。')
end_time=time.time()
times= end_time-start_time
print('共使用时间:',times)
这是并行的逻辑,查看结果共使用时间4s
2、第二种办法是 CPU 告诉磁盘:“您老人家慢慢写,我去做别的事情了”
import time
start_time=time.time()
def foo(str):
print(str)
time.sleep(2)
t1=threading.Thread(target=foo,args=('磁盘接受100M数据',))
t2=threading.Thread(target=foo,args=('你慢慢写,cpu去做其他事情',))
t1.start()
t2.start()
t1.join()
t2.join()
end_time=time.time()
times= end_time-start_time
print('共使用时间:',times)
输出结果:
从结果可以看出共使用了2s,效率提升1倍
注意:多线程对I/O 有效果,对于需要cpu计算的 时候,反复切换会浪费时间反而会降低效率具体看下面的例子:
看下面的并行的代码
import time,threading
begin_time=time.time()
def