進程和線程相關
阿新 • • 發佈:2018-09-10
spa mon pre 實現 最小 get 資源 顯卡 結果
一、操作系統/應用程序
1、硬件
硬件包括硬盤、cpu、主板、顯卡、內存、電源........
2、系統
系統就是由程序員寫出來的軟件,該軟件用於控制計算機的硬件,讓他們相互配合工作
3、安裝軟件(安裝應用程序)
二、線程和進程
應用程序調用操作系統的線程和進程
單進程、多線程的應用程序
1 import threading 2 print(‘666‘) 3 4 def func(arg): 5 print(arg) 6 t = threading.Thread(target=func) #創建線程 7 t.start() 8 9 print(‘end‘) #主線程
一個應用程序(軟件),可以有多個進程(默認只有一個),一個進程中可以創建多個線程(默認只有一個)
操作系統幫助開發者操作硬件
python在多線程和多進程的情況
1、多線程情況下
計算機密集型操作:效率低。(GIL鎖)
IO操作:效率高
2、多進程的情況下
計算機密集型:效率高(浪費資源,不得已而為之)
IO操作:效率高
對於python進程和線程的選擇:
計算機密集型:多進程
IO操作:多線程
3、GIL鎖:是全局解釋器鎖。用於限制一個進程中同一個時刻只有一個線程被CPU處理
擴展:默認GIL鎖在執行100個CPU指令(過期時間)
1import sys 2 v1=sys.getcheckinterval() 3 print(v1) #100
三、在python中主線程和子線程的執行情況
1、主線程默認等待子線程執行
1 import time 2 def func(arg): 3 time.sleep(arg) 4 print(arg) 5 t1 = threading.Thread(target=func,args=(3,)) 6 t1.start() 7 t2 = threading.Thread(target=func,args=(9,)) 8 t2.start() 9 print(123)
# 打印結果 123,3,9
當把time.sleep(arg)去掉時打印結果:3,9,123
2、主線程不在等待子線程,主線程執行完畢則所有子線程終止(子線程在可以在主線程之前完成)
加上 子線程.setDaemon()
1 import time 2 def func(arg): 3 time.sleep(2) 4 print(arg) 5 6 t1 = threading.Thread(target=func,args=(3,)) 7 t1.setDaemon(True) #設置等待 8 t1.start() 9 10 t2 = threading.Thread(target=func,args=(9,)) 11 t1.setDaemon(True) 12 t2.start() 13 print(123)
3、開發者可以控制主線程等待子線程的時間(最多等待時間)
總結:
1、線程是CPU工作的最小單元,創建線程是為了利用多核優勢實現操作
2、創建進程是為了做數據隔離,進程是為了提供環境讓線程工作
3、在python中存在一個GIL鎖
影響:多線程無法利用多核優勢
解決:創建多進程
4、IO密集型:多線程
計算機密集型:多進程
進程和線程相關