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))
    计算密集型:多进程效率高
  • 相关阅读:
    数学形态学——腐蚀、膨胀、开、闭、细化
    VS2010中 报错:error C2146、error C4430 原因一:缺少CvvImage类
    帧同步和状态同步
    HTML5触摸事件演化tap事件
    screenX clientX pageX的区别
    phaser的小游戏的onInputDown问题
    phaser入手
    pixi.js 微信小游戏 入手
    正则表达式
    剖析Vue原理&实现双向绑定MVVM-2
  • 原文地址:https://www.cnblogs.com/52-qq/p/7453125.html
Copyright © 2011-2022 走看看