併發並行操作基礎小操作 python處理程序執行緒

2021-10-16 03:20:44 字數 2209 閱讀 4638

1.多道作業系統:

對於cpu來說,它的計算效率是十分快的,它只有兩種狀態,要麼是在工作,要麼休息,而在乙個程序中,若是存在阻塞,例如進行i/o操作,time.sleep(),網路通訊有時造成的阻塞和申請緩衝區未被滿足等等時候,這個時候cpu是不用進行計算的,那麼與其任由cpu在這裡休息,不如讓他去處理其他的程序中需要cpu進行計算的地方,這個時候多道作業系統就有了用武之地,它在乙個程序遇到阻塞的時候將cpu讓出來,把cpu給另乙個程序進行計算,由於cpu的計算速度遠比程序進行i/o操作的速度要快,因此我們可以藉此統籌計畫來提公升cpu的計算效率。

2.分時作業系統:

多道作業系統解決了一部分效率問題,而分使作業系統則可以使多個程序「同時執行」,它將cpu的計算時間分成幾個細小的時間片,而每個正在執行的程序都會有三個狀態:就緒,執行,阻塞。當os接受到乙個程序開啟的命令,並分配好一快記憶體空間及其他一些資源時,這個程序就進入了就緒狀態,它被送入就緒佇列,等待cpu執行它,cpu會對就緒佇列中的程序進行計算等操作,從第乙個程序開始,每個程序執行乙個時間片,當乙個時間片執行完了此程序仍未處理完,或是此時間片處理過程中遇到了阻塞時,則它重新進入就緒佇列,等待下乙個輪到它的時間片。這種作業系統其實並不能提公升cpu的效率,但是卻能給使用者帶來多個程序同時執行的體驗。由於時間片一般極為短小,所以使用者感覺不出。

了解以上這些作業系統處理程序的機制後,就有了用python處理程序的基礎。

1.開啟多個子程序

我們把它匯入後就可以利用它們處理程序的函式與類來與程序打交道了。

可見利用multiprocessing模組中的process類即可建立程序例項,例項化該類時,會建立以此程式為父程序的子程序,子程序的記憶體空間裡擁有父程序中定義的內容,將想要子程序執行的**封裝為乙個函式作為target引數的值,並start它即可使建立出來的子程序執行它。當然這個子程序的**相對于父程序**是非同步非阻塞的,但是也可以變為阻塞的,就是process例項的join方法。如上圖第18行注釋。

3.程序間的資訊交流

程序之間的記憶體是隔離的,當我們開啟子程序時為他開闢了一快記憶體,這些資源是由父程序在結束前負責**的,因此,它們之間的資訊交流,需要一些其他的特殊方法。大致有如下5種方法來進行程序間的資訊交流:

1.管道:速度慢,容量有限,只有父子程序能通訊

2.fifo:任何程序間都能通訊,但速度慢

3.訊息佇列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完資料的問題

4.訊號量:不能傳遞復雜訊息,只能用來同步

5.共享記憶體區:能夠很容易控制容量,速度快,但要保持同步,比如乙個程序在寫的時候,另乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體

在這裡我暫時選擇了最簡單的交流方式:佇列

引入multiprocessing模組中的queue類來建立佇列,佇列是一種先進先出的資料結構,此程式開啟了消費者和生產者兩個子程序,生產者生產的資料由消費者來處理,執行結果如下圖:

可見資訊在兩個程序中間有了流通

最後是守護程序

如上圖**,在我開啟的四個子程序中,例項屬性deamon設定為true,則此程序即為父程序的守護程序,它會在父程序**執行結束後結束,此時父程序可能沒有結束,因為它還要負責收集其他子程序的占用的資源。守護程序可以用於網路通訊開啟多個子程序服務,也可以利用在父程序**執行結束的特點來作為報告父程序是否執行結束的特徵。

程序鎖:

如圖是乙個鎖的例項,最好的體現效果無法以的形式展示,這個鎖鎖住的**只能乙個乙個執行,用於多個程序處理巨量資料共享時這是乙個很好的保護措施,但是會使資料處理的速度變慢,遇到阻塞則尤為嚴重。

作業系統 並行和併發

併發 concurrent 在作業系統中,是指乙個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同乙個cpu上執行。併發不是真正意義上的 同時進行 只是cpu把乙個時間段劃分成幾個時間片段 時間區間 然後在這幾個時間區間之間來回切換,由於cpu處理的速度非常快,只要時間間隔處理...

作業系統中的併發和並行

在計算機作業系統 第4版,湯子瀛 中,小標題 並行和併發 的父標題是 併發 經過學習,我的理解是並行是併發的子集,併發是包含並行的含義的。計算機作業系統 中是這樣定義和區分併發和並行的 並行性和併發性是既相似又有區別的兩個概念。並行性是指兩個或多個事件在同一時刻發生。而併發性是指兩個或多個事件在同一...

作業系統 併發和並行的區別

學習多執行緒的時候會遇到乙個名詞 併發。這是屬於作業系統中的詞彙,需要了解併發和並行的區別,從網上蒐集了幾種說法幫助理解。併發是指乙個處理器同時處理多個任務。並行是指多個處理器或者是多核的處理器同時處理多個不同的任務。併發是邏輯上的同時發生 simultaneous 而並行是物理上的同時發生。來個比...