多线程和多进程使用对比

多线程和多进程使用对比

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

posted @ 2020-11-08 15:28  chchcharlie、  阅读(352)  评论(0编辑  收藏  举报