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))
    计算密集型:多进程效率高
  • 相关阅读:
    小强的HTML5移动开发之路(1)——HTML介绍
    HTML移动开发参考
    EBS R12 LOG files 位置
    ORACLE收集统计信息
    ORACLE sid,pid,spid总结
    How To Get Log, Trace Files In OA Framework Pages And Concurrent Request Programs
    XMPP系列(五)---文件传输
    XMPP系列(四)---发送和接收文字消息,获取历史消息功能
    iOS下如何获取一个类的所有子类
    是时候抛弃Postman了,试试 VS Code 自带神器插件
  • 原文地址:https://www.cnblogs.com/52-qq/p/7453125.html
Copyright © 2011-2022 走看看