#一:什麼是多線程 線程是操作系統能夠進行運算調度的最小單位;它被包含在進程之中,是進程中的實際運作單位。 多線程,是指從軟體或者硬體上實現多個線程併發執行的技術。具有多線程能力的電腦因有硬體支持而能夠在同一時間執行多於一個線程,進而提升整體處理性能。 簡單來說:線程是程式中一個單一的順序控制流程 ...
一:什麼是多線程
線程是操作系統能夠進行運算調度的最小單位;它被包含在進程之中,是進程中的實際運作單位。
多線程,是指從軟體或者硬體上實現多個線程併發執行的技術。具有多線程能力的電腦因有硬體支持而能夠在同一時間執行多於一個線程,進而提升整體處理性能。
簡單來說:線程是程式中一個單一的順序控制流程;而多線程就是在單個程式中同時運行多個線程來完成不同的工作。
多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。多線程是在同一時間需要完成多項任務的時候實現的。
二:多線程優缺點
優點:
- 使用線程可以把占據時間長的程式中的任務放到後臺去處理
- 程式的運行效率可能會提高
- 可以分別設置各個任務的優先順序以優化性能
- 可以讓同一個程式的不同部分併發執行,釋放一些珍貴的資源如記憶體占用等
缺點
- 更多的線程需要更多的記憶體空間
- 因為多線程需要開闢記憶體,而且線程切換需要時間因此會很消耗系統記憶體
- 由於多個線程之間存在共用數據,因此容易出現線程死鎖的情況
- 多線程需要協調和管理,需要CPU時間跟蹤線程,線程的終止會對程式產生影響
三:python threading 模塊
threading模塊是python的內置庫,所以無需用pip去下載直接調用就行
import threading
註意這裡的Thread是大寫,因為python對字母的大小寫十分敏感
四:多線程開發
1.創建一個Thread對象,並封裝線程
t = threading.Thread(target=calculate,args=(n,))
第一個參數是線程函數變數,第二個參數args是一個數組變數參數,如果只傳遞一個值,就只需要n, 如果需要傳遞多個參數,那麼還可以繼續傳遞下去其他的參數,其中的逗號不能少,元組中只包含一個元素時,需要在元素後面添加逗號
2.常見方法
t.start() #線程準備,開始執行
t.join() #等待線程任務結束,在向下執行
3.線程的簡單運用(節省時間)
一個線程(代碼依次執行)
```plaintext
import time
def calculate(n):
for x in n:
time.sleep(1)
print('除法',x%2)
def calculate2(n):
for x in n:
time.sleep(1)
print('乘法',x*2)
n=[1,2,3,4,5,6,7,8]
start=time.time()
calculate(n)
print()
calculate2(n)
end=time.time()
print(end-start)
單線程運行倆函數所需的時間為16.106837511062622s
多線程
import threading
import time
def calculate(n):
for x in n:
time.sleep(1)
print('除法',x%2)
def calculate2(n):
for x in n:
time.sleep(1)
print('乘法',x*2)
n=[1,2,3,4,5,6,7,8]
start=time.time()
t1 = threading.Thread(target=calculate,args=(n,))
t2 = threading.Thread(target=calculate2,args=(n,))
t1.start()
time.sleep(2)
t2.start()
t1.join()
t2.join()
end = time.time()
print(end-start)
多線程所需時間為10.068055391311646s
五:總結:
以上是多線程中最最最基礎的東西
相比之下多線程的效率要比單線程的效率要高,也比較節約時間