Python學習之併發基礎知識

2022-06-01 21:24:11 字數 2422 閱讀 4865

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...