线程与进程的一些应用
生活随笔
收集整理的這篇文章主要介紹了
线程与进程的一些应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#分析:
我們有四個任務需要處理,處理方式肯定是要玩出并發的效果,解決方案可以是:
方案一:開啟四個進程
方案二:一個進程下,開啟四個線程#單核情況下,分析結果: 如果四個任務是計算密集型,沒有多核來并行計算,方案一徒增了創建進程的開銷,方案二勝如果四個任務是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)) 計算密集型:多進程效率高
轉載于:https://www.cnblogs.com/52-qq/p/7453125.html
總結
以上是生活随笔為你收集整理的线程与进程的一些应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kinect2的标定
- 下一篇: super函数没有那么简单-super原