Python 程序(一)理論部分

2022-03-22 23:19:19 字數 3385 閱讀 4783

程序(process)是計算機中的程式關於某資料集合上的一次執行,即正在執行的程式,是系統進行資源分配和排程的基本單位,程序是對正在執行程式的乙個抽象,在早期面向程序設計的計算機結構中,程序是程式的基本執行實體,在當代面向執行緒設計的計算機結構中,程序是執行緒的容器,執行緒是執行的實體。程序的概念起源於作業系統,是作業系統最核心的概念,作業系統的其他所有內容都是圍繞程序的概念展開的。

程序定義:

作業系統的作用:

多道技術:在早期計算機中可以利用的cpu只有乙個,為了充分利用cpu效能,提高使用者操作體驗,出現了多道技術。將乙個單獨的cpu虛擬成多個cpu(多道技術:時間多路復用和空間多路復用+硬體上支援隔離),即使在乙個單核cpu也能保證支援(偽)並行的能力。如果沒有程序的抽象,現代計算機將不復存在。

多道技術特性:

注意如果乙個程序長時間占用cpu資源,作業系統會強制將cpu資源分配給其它在就緒佇列中的程式,避免乙個程式長時間占有cpu資源,導致其它程式無法執行。

程序與程式的區別:

要想多個程序交替執行,作業系統必須對這些程序進行排程,這個排程也不是隨機進行的,而是需要遵循一定的法則,由此就有了程序的排程演算法。

先來先服務(fcfs)排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業(程序),而不利於短作業(程序)。由此可知,本演算法適合於cpu繁忙型作業,而不利於i/o繁忙型的作業(程序)。

短作業(程序)優先排程演算法(sj/pf)是指對短作業或短程序優先排程的演算法,該演算法既可用於作業排程,也可用於程序排程。但其對長作業不利;不能保證緊迫性作業(程序)被及時處理;作業的長短只是被估算出來的。

時間片輪轉(round robin,rr)法的基本思路是讓每個程序在就緒佇列中的等待時間與享受服務的時間成比例。在時間片輪轉法中,需要將cpu的處理時間分成固定大小的時間片,例如,幾十毫秒至幾百毫秒。如果乙個程序在被排程選中之後用完了系統規定的時間片,但又未完成要求的任務,則它自行釋放自己所占有的cpu而排到就緒佇列的末尾,等待下一次排程。同時,程序排程程式又去排程當前就緒佇列中的第乙個程序。

顯然,輪轉法只能用來排程分配一些可以搶占的資源。這些可以搶占的資源可以隨時被剝奪,而且可以將它們再分配給別的程序。cpu是可搶占資源的一種。但印表機等資源是不可搶占的。由於作業排程是對除了cpu之外的所有系統硬體資源的分配,其中包含有不可搶占資源,所以作業排程不使用輪轉法。

在輪轉法中,時間片長度的選取非常重要。首先,時間片長度的選擇會直接影響到系統的開銷和響應時間。如果時間片長度過短,則排程程式搶占處理機的次數增多。這將使程序上下文切換次數也大大增加,從而加重系統開銷。反過來,如果時間片長度選擇過長,例如,乙個時間片能保證就緒佇列中所需執行時間最長的程序能執行完畢,則輪轉法變成了先來先服務法。時間片長度的選擇是根據系統對響應時間的要求和就緒佇列中所允許最大的程序數來確定的。

在輪轉法中,加入到就緒佇列的程序有3種情況:

如果對這些程序區別對待,給予不同的優先順序和時間片從直觀上看,可以進一步改善系統服務質量和效率。例如,我們可把就緒佇列按照程序到達就緒佇列的型別和程序被阻塞時的阻塞原因分成不同的就緒佇列,每個佇列按fcfs原則排列,各佇列之間的程序享有不同的優先順序,但同一佇列內優先順序相同。這樣,當乙個程序在執行完它的時間片之後,或從睡眠中被喚醒以及被建立之後,將進入不同的就緒佇列。

前面介紹的各種用作程序排程的演算法都有一定的侷限性。如短程序優先的排程演算法,僅照顧了短程序而忽略了長程序,而且如果並未指明程序的長度,則短程序優先和基於程序長度的搶占式排程演算法都將無法使用。

而多級反饋佇列排程演算法則不必事先知道各種程序所需的執行時間,而且還可以滿足各種型別程序的需要,因而它是目前被公認的一種較好的程序排程演算法。在採用多級反饋佇列排程演算法的系統中,排程演算法的實施過程如下所述。

並行:當系統有兩個以上cpu時,則程序的執行有可能是並行,即兩個程序或兩個以上的程序可以同時執行,且互不搶占cpu資源,這種方式我們稱之為並行。

併發:如果系統只有乙個cpu,則它根本不可能真正同時執行乙個以上的程序,在同一時刻只能有乙個程序被執行,為了提高使用者體驗,充分利用cpu效能,使用多道技術將cpu執行時間劃分成若干個時間段,再將時間段分配給各個程序輪流執行,在乙個時間段的程序**執行時,其它程序處於掛起或者阻塞狀。.這種方式我們稱之為併發。

區別:

程序的狀態如下圖所示

在了解其他概念之前,我們首先要了解程序的幾個狀態。在程式執行的過程中,由於被作業系統的排程演算法控制,程式會進入幾個狀態:就緒,執行和阻塞。

就緒(ready)狀態:當程序已分配到除cpu以外的所有必要的資源,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。

執行/執行(running)狀態:當程序已獲得處理機,其程式正在處理機上執行,此時的程序狀態稱為執行狀態。

阻塞(blocked)狀態:正在執行的程序,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起程序阻塞的事件可有多種,例如,等待i/o完成、申請緩衝區不能滿足、等待信件(訊號)等。

序列指的是任務的執行方式。序列在執行多個任務時,按順序執行,執行完成乙個任務後才能進行下乙個。

並行指的是多個任務可以同時執行,不需要等待。

所謂同步就是乙個任務的完成需要依賴另外乙個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列。要麼成功都成功,失敗都失敗,兩個任務的狀態可以保持一致需要等待、協調執行。

所謂非同步就是彼此獨立的,分配任務後,不需要等待該任務的執行結果,繼續做自己的事,無論被分配的任務是執行成功還是失敗都是不關心的,只要自己完成了整個任務就算完成了。至於其它任務是否真正完成無法確定,所以它是不可靠的任務序列。

小結:

1、序列和同步的區別:

序列指的是在早期單核cpu時,一台電腦在同一時刻只能執行乙個程式,如果想要執行另乙個程式需要關閉當前程式,才能執行下乙個程式,是針對多個程式而言。同步指的是在乙個程式中同一時刻只能執行乙個任務。是針對乙個程式中多個程序或多個執行緒來說的。

所以兩者有著本質上的區別。序列是針對多個程式,同步是針對乙個程式內部的多個程序或多個執行緒的。

2、並行和非同步的區別:

並行指的是多核cpu,在同一時刻可以執行多個程式,

非同步指的是在同乙個程式內可以執行多個程序或者多個執行緒。

兩者本質上的區別就是並行指的是多個程式,非同步指的是乙個程式內部的多個程序和多個執行緒。

阻塞:只要是涉及到i/o操作或者網路請求的都屬於阻塞如read,recv,accept。

python 併發程式設計理論部分

一,什麼是程序?程序 正在進行的乙個過程或者說乙個任務。而負責執行任務的則是cpu 舉例 單核 多道,實現多個程序的併發執行 egon在乙個時間段內有很多任務要做 python備課的任務,寫書的任務,交女朋友的任務,王者榮耀上分的任務,但egon同一時刻只能做乙個任務 cpu同一時間只能幹乙個活 如...

Python 33(2)程序理論

一 什麼是程序 程序指的是乙個正在進行 執行的程式,程序是用來描述程式執行過程的虛擬概念 程序vs程式 程式 一堆 程序 程式的執行的過程 程序的概念起源於作業系統,程序是作業系統罪核心的概念,作業系統其它所有的概念都是圍繞程序來的 作業系統理論 作業系統是什麼?作業系統是乙個協調 管理 控制計算機...

python 程序理論知識

1.在看程序之前了解一下作業系統 1 作業系統的作用 a 隱藏醜陋複雜的硬體介面,提供良好的抽象介面 b 管理 排程程序,並且將多個程序對硬體的競爭變得有序 2 多道技術 a.產生背景 針對單核,實現併發 ps 現在的主機一般是多核,那麼每個核都會利用多道技術 有4個cpu,執行於cpu1的某個程式...