多线程和多进程使用对比
多线程和多进程使用对比
1、多线程和多进程使用对比例子
需求:写一个计算密集型任务,写一个IO密集型任务,分别使用多线程和多进程测试两个任务执行的消耗时间
# 计算密集型任务 def task1(): # 从0开始计算10000000次 +1操作 i = 0 for line in range(10000000): i += 1 # IO密集型任务 def task2(): time.sleep(3) if __name__ == '__main__': # 使用多线程,测试计算密集型任务 start_time = time.time() list1 = [] for i in range(6): # 创建6个子线程 p = Thread(target=task1) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多线程-计算密集型】任务执行时间为 {end_time - start_time}") # 使用多线程,测试IO密集型 start_time = time.time() list1 = [] for i in range(6): # 创建6个子线程 p = Thread(target=task2) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多线程-IO密集型】任务执行时间为 {end_time - start_time}") # 使用多进程,测试计算密集型 start_time = time.time() list1 = [] for i in range(6): # 创建6个子进程 p = Process(target=task1) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多进程-计算密集型】任务执行时间为 {end_time - start_time}") # 使用多进程,测试IO密集型 start_time = time.time() list1 = [] for i in range(6): # 创建6个子进程 p = Process(target=task2) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多进程-IO密集型】任务执行时间为 {end_time - start_time}")
执行时间:
【多线程-计算密集型】任务执行时间为 3.986522674560547 【多线程-IO密集型】任务执行时间为 3.0031485557556152 【多进程-计算密集型】任务执行时间为 2.277726650238037 【多进程-IO密集型】任务执行时间为 3.283907413482666
由上述例子就可以轻松得出结论。
2、对比使用结论
计算密集型:使用多进程(并行)
假设有100份原材料同时到达工厂,聘请100个工人同时制造,效率最高
IO密集型:使用多线程(并发)
假设有买了100份原材料,但是只要40份到达工厂,其他的还在路上,那么聘请40个工人先制造,效率最高
PS:多线程 “并发” 提交执行任务(代码)
多进程 “并行” 提交执行任务(代码)
IO密集型任务,假如每个任务执行4s
- 单核:
开启线程比进程更加节省资源
- 多核:
- 多线程:
假如开启4个子线程:共消耗 16s
- 多进程:
假如开启4个进程:共消耗 16s + 申请开启资源消耗的时间
计算密集型任务,假如每个任务执行4s
- 单核:
开启线程比进程更加节省资源
- 多核:
- 多线程:
假如开启4个子线程:共消耗 16s
- 多进程:
假如开启4个进程:共消耗 4s