python基礎-併發程式設計part01
阿新 • • 發佈:2019-12-07
併發程式設計
作業系統發展史
- 穿孔卡片
- 讀取資料速度特別慢,CPU利用率極低
- 單使用者使用
- 批處理
- 讀取資料速度特別慢,CPU利用率極低
- 聯機使用
- 離線批處理(現代作業系統的設計原理)
- 讀取資料速度提高
- CPU的利用率提高
多道技術(基於單核背景下產生的)
- 單道(序列):一個任務完完整整地執行完畢後,才能執行下一個任務
- 多道技術:允許多個程式同時進入記憶體並執行。同時把多個程式放入記憶體,並允許它們交替在CPU中執行,它們共享系統中的各種硬、軟體資源。當一道程式因I/O請求而暫停執行時,CPU便立即轉去執行另一道程式。
多道技術的實現是為了解決多個程式競爭或者說共享同一個資源的有序排程問題,解決方式即多路複用,多路複用分為時間上的複用和空間上的複用。
空間上的複用:多個程式使用一個CPU(多個程序複用記憶體空間)
時間上的複用:多個程序複用CPU的時間
當執行程式遇到IO時,作業系統會將CPU的執行許可權剝奪
優點:CPU的執行效率提高
當執行程式執行時間過長時,作業系統會將CPU的執行許可權剝奪
缺點:程式的執行效率低
併發與並行
- 併發:是偽並行,即看起來是同時執行。單個CPU+多道技術就可以實現併發
- 並行:同時執行,只有具備多個CPU才能實現並行
無論是並行還是併發,在使用者看來都是“同時”執行的。不管是程序還是執行緒,都只是一個任務而已,真正工作的只有CPU。一個CPU同一時刻只能執行一個任務。
程式、程序和執行緒
程式:一系列程式碼檔案組成
程序:一個正在執行的程式的一個例項。包括程式程式碼和當前的活動
執行緒:CPU可使用的最基本單元。 也成為輕量級程序。執行緒是程序中的一個實體。 執行緒是程序中的指令序列,其行為類似於程序。不同於程序是因為它沒有自己的程式控制塊。
ps:通常,在程序中建立多執行緒。執行緒在程序內執行,程序在作業系統核心中執行。
程序的三種狀態
就緒態:具備執行的所有條件,邏輯上可以執行,等待CPU處理
等待(阻塞)態:等待某一事件
執行態:正在佔用處理器執行
程序排程
- 先來先服務排程演算法。缺點:執行效率低
- 短作業優先排程演算法,執行時間越短,則優先排程。缺點:導致執行時間長的程式,需要等待所有時間短的程式執行完畢後,才能執行
- 時間片輪轉法
- 多級反饋佇列
同步與非同步?
同步:?
非同步:?
阻塞與非阻塞?
阻塞:凡是遇到IO都會阻塞
非阻塞:除了IO都是非阻