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

python學習筆記(62) 多線程

處理 安全性 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) 多線程