一、線程相關(guān)概念
1、進(jìn)程
進(jìn)程 與 操作系統(tǒng) : 進(jìn)程 是 操作系統(tǒng) 中 能夠獨(dú)立運(yùn)行的單元 , 是 操作系統(tǒng) 對(duì) 正在運(yùn)行的 應(yīng)用程序 的 抽象結(jié)構(gòu) 描述 ;
- 操作系統(tǒng) 中 運(yùn)行的每個(gè) 應(yīng)用程序 就是一個(gè)進(jìn)程 ;
- 一個(gè)操作系統(tǒng)中可以運(yùn)行 多個(gè) 進(jìn)程 ;
- 每個(gè) 應(yīng)用程序 都會(huì)被 操作系統(tǒng) 分配一個(gè) 進(jìn)程 ID ;
- 多個(gè)進(jìn)程之間 , 可以通過 管道 / 套接字 / 信號(hào)量 / 共享內(nèi)存 進(jìn)行通信 ;
進(jìn)程 與 資源 :
- 進(jìn)程 是 操作系統(tǒng) 中 , 能夠 獨(dú)立運(yùn)行 和 資源分配 的 基本單位 , 進(jìn)程運(yùn)行需要消耗 CPU / 硬盤 / 內(nèi)存 / IO 設(shè)備 等資源 ;
- 進(jìn)程的本質(zhì) 是 機(jī)器碼指令 + 數(shù)據(jù) + 內(nèi)存 ( 堆內(nèi)存 / 棧內(nèi)存 ) 組成的 可 獨(dú)立運(yùn)行 的實(shí)體 ;
2、線程
進(jìn)程 調(diào)度 涉及到 CPU / 硬盤 / 內(nèi)存 / IO 設(shè)備 等多種資源 , 調(diào)度開銷很大 , 效率很低 ;
為了 提高 資源調(diào)度效率 , 提出了 " 線程 " 概念 , 線程 的 運(yùn)行 和 調(diào)度 相對(duì)于 進(jìn)程 都是 輕量級(jí)的 ;
- 線程 比 進(jìn)程 更加 輕量級(jí) ;
- 調(diào)度資源 成本 比 進(jìn)程要低 ;
線程 是 操作系統(tǒng)中 獨(dú)立運(yùn)行 和 資源分配 的 最小單位 ;
一個(gè)進(jìn)程可以同時(shí)運(yùn)行多個(gè)線程 , 引入線程 可以 提高 操作系統(tǒng)的 并發(fā)效率 ;
在同一個(gè)進(jìn)程中 , 多個(gè)線程可以共享該進(jìn)程的 CPU / 硬盤 / 內(nèi)存 / IO 設(shè)備 等多種資源 ;
3、協(xié)程 / 纖程
" 協(xié)程 " 是 輕量級(jí) 的 線程 , 一個(gè)線程 可以包含 多個(gè) " 協(xié)程 " ;
" 協(xié)程 " 是 由 用戶空間 的 應(yīng)用程序 控制的 , 內(nèi)核空間 的 操作系統(tǒng)內(nèi)核 對(duì)此 一無所知 , 也就是說 協(xié)程 對(duì) 內(nèi)核 來說是隱藏的 ;
操作系統(tǒng) 無法 調(diào)度 " 協(xié)程 " ;
協(xié)程 有自己的 寄存器上下文 和 棧 , 協(xié)程調(diào)度時(shí) ,
- 協(xié)程掛起 需要將 寄存器上下文 和 棧 保存起來 ,
- 協(xié)程恢復(fù) 時(shí) 再 恢復(fù) 寄存器上下文 和 棧 ;
協(xié)程 需要 依托 線程 執(zhí)行 , 同一時(shí)間 一個(gè) 線程 只能 執(zhí)行一個(gè)協(xié)程任務(wù) ,
協(xié)程 有 掛起 和 恢復(fù) 兩種狀態(tài) , 在線程中 , 協(xié)程恢復(fù) 則 開始執(zhí)行協(xié)程 , 線程不能再執(zhí)行其它代碼操作 , 協(xié)程掛起 則停止執(zhí)行協(xié)程 , 線程繼續(xù)執(zhí)行其它代碼邏輯 ;
在主線程中執(zhí)行協(xié)程任務(wù) , 協(xié)程掛起后 , 會(huì)繼續(xù)執(zhí)行主線程的其它操作 , 不會(huì)阻塞主線程 ;
在 一個(gè) 線程 中 , 可以定義多個(gè) 協(xié)程 任務(wù) , 可以任意切換 協(xié)程 任務(wù) 執(zhí)行 , 同一時(shí)間只能運(yùn)行一個(gè)協(xié)程任務(wù) ;
協(xié)程 和 纖程 是 相同的概念 , 在不同的開發(fā)平臺(tái) / 場景 中的 對(duì)同一個(gè)概念的表述 ,
- Kotlin 中叫做 " 協(xié)程 "
- Windows 中叫做 " 纖程 "
4、管程
" 管程 " 是 用于 管理 共享資源 的 程序結(jié)構(gòu) ;
" 管程 " 提供了 可以 確保 多個(gè)進(jìn)程 訪問 臨界資源 的 同步機(jī)制 ;
臨界資源 是 一次僅允許一個(gè)進(jìn)程使用的 共享資源 , 多個(gè)進(jìn)程只能互斥訪問的資源 ;文章來源:http://www.zghlxwxcb.cn/news/detail-608815.html
- 屬于臨界資源的硬件有打印機(jī)、磁帶機(jī)等;
- 屬于臨界資源的軟件有消息隊(duì)列、變量、數(shù)組、緩沖區(qū)等。
進(jìn)程間采取互斥方式 , 實(shí)現(xiàn)對(duì)這種資源的共享 ;文章來源地址http://www.zghlxwxcb.cn/news/detail-608815.html
到了這里,關(guān)于【Python】多線程編程 ① ( 線程相關(guān)概念 | 進(jìn)程 | 線程 | 協(xié)程 / 纖程 | 管程 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!