多线程和多进程使用对比[Python基础]

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

回到顶部