python學習筆記(62) 多執行緒
阿新 • • 發佈:2018-11-26
程序是資源分配的最小單位(資料隔離),執行緒是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()