1. 程式人生 > >python學習筆記(62) 多執行緒

python學習筆記(62) 多執行緒

程序是資源分配的最小單位(資料隔離),執行緒是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()