8.1.1 作業系統的定義
作業系統是存在於硬體與軟體之間,管理、協調、排程軟體與硬體的互動。
資源管理解決物理資源數量不足和合理分配資源這兩個問題,
通俗來說,作業系統可以分成兩部分功能:
一是將硬體資源介面的呼叫變得方便簡單;
二是合理排程應用程式對硬體資源的競態請求
8.1.2 程序
具有獨立功能的程式在某個資料集合上的一次執行活動,也是作業系統進行資源分配和保護的基本單位。
正在執行的檔案或程式,而負責執行的主體使cpu。
8.1.3 程序與程式
程式可以說是一些檔案或者**等指令的集合,程式不能單獨執行,只有把程式載入到記憶體中,系統為它分配資源之後才能執行,而程式的執行就叫執行緒,程序包括程式、資料集和程序控制三個模組,是作業系統進行資源分配和保護的基本單位。
把乙個程式在乙個資料集上的依次執行稱為乙個程序。程式是靜態的指令集合,而程序是動態的。
同乙個程式同時執行兩次也是兩個程序。
8.1.4 並行與併發
併發: 乙個處理器同時處理多個任務;由cpu的多道技術實現,是邏輯上的同時發生,微觀上仍是同一時刻只能執行乙個任務,只不過cpu利用多道技術在多個任務鍵來回切換執行,而切換執行的時間差,我們無法察覺,巨集觀上感覺是多個任務同時發生。
並行: 指在同一時刻,有多條指令在多個處理器上同時執行,物理上真正實現多工同時執行。
多道技術:對單個cpu而言,空間上覆用,記憶體中同時存入多道程式;時間復用,cpu在多個程序間快速切換(一是遇到io,二是執行一定的時間),使每個程序各自執行一定的時間。
【重要概念】
序列:所有的程序由cpu乙個乙個的執行
併發:單個cpu同時執行多個程序(來回切換),看起來像是同時執行
並行:多個cpu真正的同時執行多個程式
阻塞:遇到io(write input read sleep recv accept)才叫阻塞
非阻塞:沒有io
8.1.5 同步/非同步&阻塞/非阻塞(重要)
執行緒程序是負責程式執行的執行單元,乙個程序中至少有乙個執行緒。
執行緒與程序的區別:
同步發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回
【常規用法】
concurrent.futures.processpoolexecutor().submit(func,).result()
concurrent.futures.threadpoolexecutor().submit(func,).result()
非同步與同步概念相對,當非同步功能呼叫後,呼叫者沒有立即得到結果,而是等到非同步功能完成後,通過狀態、通知或者**函式來通知呼叫者
【常規用法】
concurrent.futures.processpoolexecutor(3).submit(func,)
concurrent.futures.threadpoolexecutor(3).submit(func,)
from concurrent.futures import processpoolexecutor
import os,time,random
def f():
print(f" is runing")
time.sleep(random.randint(1,3))
return f" is done "
if __name__ == '__main__':
p = processpoolexecutor(max_workers=4)
l =
sta1 = time.time()
for i in range(10):
obj = p.submit(f) # 非同步呼叫執行submit
print(f'take times') # 時間非常短
time.sleep(4)
sta2 = time.time()
for j in l:
print(j.result()) # 每乙個result都是同步呼叫
print(f'take times') # 總耗時時間比較長
阻塞
阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起,如遇到io操作,呼叫函式只有在得到結果之後才會將阻塞的執行緒啟用
非阻塞與阻塞的概念相對,指在不能立即得到結果之前也會立刻返回,同時該函式不會阻塞當前執行緒,程式沒有遇到io或者遇到io後通過協程讓cpu去執行本執行緒裡的其他任務,盡可能占用cpu
總結 同步和非同步關注的是訊息通訊機制,說的是任務的發布與結果的**;
阻塞和非阻塞關注的是程序在等待呼叫結果時的狀態,阻塞是當請求不能滿足的時候就將程序掛起,而非阻塞則不會阻塞當前程序
Python學習之基礎知識
1.python使用縮進來組織 塊,使用4個空格的縮排。當語句以冒號 結尾時,縮排的語句視為 塊。在python中,不建議使用tab鍵,為了 的整潔性和易讀性,建議使用4個空格縮排。2.python程式是大小寫敏感的,如果寫錯了大小寫,程式會報錯。name和name 是兩個不同的物件 3.pytho...
Python學習基礎知識
1 python中的布林運算 1 python把0 空字串 和none看成 false,其他數值和非空字串都看成 true 2 python直譯器在做布林運算時,只要能提前確定計算結果,它就不會往後算了,直接返回結果。2 python中的list 新增 2 用list的 insert 方法,它接受兩...
Python基礎知識學習
anaconda環境配置 anaconda pycharm環境 參考 直譯器 參考 和 python入門 anaconda和pycharm的安裝和配置 print and input print hello,world x 12 print x s hello y len s print the l...