您好,登錄后才能下訂單哦!
并發
同時做某些事,但是強調,一段時間內有事情要處理。
并發的解決
1:隊列、緩沖區
使用隊列解決資源使用的問題,先進先出,其實就是一個緩沖區。
2:爭搶
搶到資源就上鎖,排他性的鎖,其它只能等候。
3:預處理
提前加載用戶需要的數據,緩存。
4:并行
通過多開進程、線程實現并行處理,購買更多的服務器來解決問題。(水平擴展)
5:提速
提高性能,(垂直擴展)
6:消息中間件
常見的消息中間件有RabbitMQ、ActiveMQ、RocketMQ、kafka
進程
計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。
線程
線程有時也被稱為輕量級進程,是程序執行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。
進程和線程的關系
程序是源代碼編譯后的文件,而這些文件存放在磁盤上。當程序被操作系統加載到內存中,就是進程,進程中存放著指令和數據(資源),它也是線程的容器。
Linux進程有父進程、子進程,windows的進程是平等關系。
線程的狀態
就緒(Ready):線程能夠運行,但在等待被調度。可能線程剛剛創建啟動,或者剛剛從阻塞中恢復,或者被其他線程搶占
運行(Running):線程正在運行
阻塞(Blocked) :線程等待外部事件發生而無法運行,如I/O操作
終止(Terminated):線程完成,或者退出,或被取消
Python中的線程開發使用標準庫threading
Thread類
參數:
target:線程調用的對象,就是目標函數
name:為線程起一個名字
args:為目標函數傳遞實參,元組
kwargs:為目標函數關鍵字傳參,字典
線程的啟動
需要調用start()方法。
線程的退出
Python沒有提供線程退出的方法,線程在下面情況時退出
1:線程函數內語句執行完畢
2:線程函數中拋出未處理的異常
線程的傳參
本質上就是函數傳參。
threading的屬性和方法
方法:
current_thread():返回當前線程對象
main_thread():返回主線程對象
active_count():當前處于alive狀態的線程個數
enumerate():返回所有活著的線程的列表,不包括已經終止的線程和未開始的線程
get_ident():返回當前線程的ID,非0整數
Thread實例的屬性和方法
name:只是一個名字,只是個標識,名稱可以重名。getName(),setName()獲取、設置這個名詞
ident:線程ID,它時非0整數。線程啟動后才會有ID,否則為None.線程退出,此ID依舊可以訪問,此ID可以重復使用。
is_alive():返回線程是否或著
start():啟動線程,每一個線程必須且只能執行該方法一次
run():運行線程函數
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。