zoukankan      html  css  js  c++  java
  • 线程与进程的一些应用

    #分析:
    我们有四个任务需要处理,处理方式肯定是要玩出并发的效果,解决方案可以是:
    方案一:开启四个进程
    方案二:一个进程下,开启四个线程
    
    #单核情况下,分析结果: 
      如果四个任务是计算密集型,没有多核来并行计算,方案一徒增了创建进程的开销,方案二胜
      如果四个任务是I/O密集型,方案一创建进程的开销大,且进程的切换速度远不如线程,方案二胜
    
    #多核情况下,分析结果:
      如果四个任务是计算密集型,多核意味着并行计算,在python中一个进程中同一时刻只有一个线程执行用不上多核,方案一胜
      如果四个任务是I/O密集型,再多的核也解决不了I/O问题,方案二胜
    
     
    #结论:现在的计算机基本上都是多核,python对于计算密集型的任务开多线程的效率并不能带来多大性能上的提升,甚至不如串行(没有大量切换),但是,对于IO密集型的任务效率还是有显著提升的。
    

      

     1 from multiprocessing import Process
     2 from threading import Thread
     3 import threading
     4 import os,time
     5 def work():
     6     time.sleep(2)
     7     print('===>')
     8 
     9 if __name__ == '__main__':
    10     l=[]
    11     print(os.cpu_count()) #本机为4核
    12     start=time.time()
    13     for i in range(400):
    14         # p=Process(target=work) #耗时12s多,大部分时间耗费在创建进程上
    15         p=Thread(target=work) #耗时2s多
    16         l.append(p)
    17         p.start()
    18     for p in l:
    19         p.join()
    20     stop=time.time()
    21     print('run time is %s' %(stop-start))
    I/O密集型:多线程效率高
     1 from multiprocessing import Process
     2 from threading import Thread
     3 import os,time
     4 def work():
     5     res=0
     6     for i in range(100000000):
     7         res*=i
     8 
     9 
    10 if __name__ == '__main__':
    11     l=[]
    12     print(os.cpu_count()) #本机为4核
    13     start=time.time()
    14     for i in range(4):
    15         p=Process(target=work) #耗时5s多
    16         p=Thread(target=work) #耗时18s多
    17         l.append(p)
    18         p.start()
    19     for p in l:
    20         p.join()
    21     stop=time.time()
    22     print('run time is %s' %(stop-start))
    计算密集型:多进程效率高
  • 相关阅读:
    集训Day 7 2020.3.7 动态规划(二)
    集训Day 6 2020.3.6 动态规划(一)
    集训Day 5 2020.3.4 杂题选讲(二)
    集训Day 4 2020.3.3 杂题选讲(一)
    集训Day 2 2020.3.1 数论(质数与筛法)
    集训Day 1 2020.2.29 数论复习(gcd)(一)
    [BZOJ4152]The Captain
    知识点清单(全)
    字符串相关知识
    分块相关知识
  • 原文地址:https://www.cnblogs.com/52-qq/p/7453125.html
Copyright © 2011-2022 走看看