初始多線程
import threading
def Process(arg):
print(arg)
Process(1) #表示隻有一個人去執行Process這個函數
for i in range(10): #建立十個線程一次次執行Process這個函數
t = threading.Thread(target=Process, args=(i,))
t.start()
多線程,多線程有一個好的東西就是線程池。
線程和程序的優缺點:
程序:
優點: 同時利用多個CPU,能夠同時進行多個操作。
缺點: 耗費資源(重新開辟新的記憶體)
線程:
優點: 共享記憶體,IO操作的時候,創造并發操作。
缺點: 搶占資源。
程序不是越多越好,CPU個數 = 程序個數(有幾個CPU最好建立幾個程序)
線程也不是越多越好,具體案例,具體分析,(有幾個線程建立幾個線程,應為線程請求上下文時非常耗時)
程序和線程的目的是能夠提高效率。
單線程和單程序的另一個名字: 主線程,主程序。
主線程可以建立子線程。
在計算機裡邊執行任務的最小單元是線程。
線程的應用的場景是在IO操作的時候,應為IO操作不用CPU,
IO密集型: 适合用線程,IO(不用CPU)
計算密集型: 适合用程序,計算(用CPU)
GIL: 在python裡邊叫全局解釋器鎖,鎖一個程序裡邊的多個線程。
線程鎖,threading.Rlock 和 threading.lock
import threading
import time
globals_num = 0
lock = threading.Rlock()
def Func():
lock.acquire() #獲得鎖
global globals_num
globals_num += 1
time.sleep(1) #等待一秒
print (globals_num)
lock.release() #釋放鎖
for i in range(10): #建立十個線程,每個線程都執行一遍Func函數
t = threading.Thread(target=Func)
t.start()