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))
    计算密集型:多进程效率高
  • 相关阅读:
    项目启动报错:No suitable driver found for jdbc:oracle:thin:@192.168.7.146:1521:oracle
    (八)Oracle学习笔记—— 触发器
    (七)Oracle学习笔记—— 游标
    spring自动装配(No qualifying bean )
    Intellij output 中文乱码
    使用Spring开发和监控线程池服务
    IDEA在编辑时提示could not autowire
    java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
    Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别
    idea 添加多模块项目
  • 原文地址:https://www.cnblogs.com/52-qq/p/7453125.html
Copyright © 2011-2022 走看看