python學習筆記(62) 多線程
阿新 • • 發佈:2018-11-27
處理 安全性 accep 語言 tar 高cpu 導致 性問題 targe
進程是資源分配的最小單位(數據隔離),線程是cpu調度的最小單位,每個進程至少有一個線程
能直接被cpu調度的是線程,輕型實體
共享進程資源,可以並發執行,全局變量在多個線程之間共享
用戶級線程,內核級線程,混合實現
全局解釋器鎖 GIL:同一時刻只能有一個線程來訪問cpu
同一進程的不同線程在不同的cpu核心運行導致數據安全性問題
鎖的是線程,會導致效率降低
不是python語言的問題,是Cpython解釋器的特性
在Cpython解釋器下的python程序,在同一時刻,多線程中只能有一個線程被cpu執行
對於高CPU的計算類,多線程優勢不大
對於高IO的類型,多線程優勢很大
爬蟲、聊天、處理日誌、處理web請求、讀寫數據庫
py是解釋型語言,解釋型語言還沒有能真正解決多核安全性問題的
java是編譯型語言
threading.current_thread()
threading.active_conut() # 主線程也計算在內
threading.enumerate() # 枚舉子線程
##################################################
多線程實現sever
import socket
from threading import Thread
def serve(conn):
while True:
conn.send(b‘Hello‘)
msg = conn.recv(1024).decode(‘utf-8‘)
print(msg)
conn.close()
sk = socket.socket()
sk.bind((‘127.0.0.1‘,8080))
sk.listen()
while True:
conn,addr = sk.accept()
p = Thread(target= serve,args=(conn,))
p.start()
sk.close()
python學習筆記(62) 多線程