多线程和多进程使用对比[Python基础]
多线程和多进程使用对比
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
以上是 多线程和多进程使用对比[Python基础] 的全部内容, 来源链接: utcz.com/z/530060.html