1. 程式人生 > >進程和線程相關

進程和線程相關

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指令(過期時間)

1
import 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密集型:多線程

  計算機密集型:多進程

進程和線程相關