併發程式設計之多程序

2022-07-07 13:30:22 字數 2627 閱讀 1449

程序理論

一、什麼是程序?

程序:正在進行的乙個過程或者說乙個任務。而負責執行任務則是cpu。

二、程序與程式的區別

程式僅僅只是一堆**而已,而程序指的是程式的執行過程。

同乙個程式執行兩次,那也是兩個程序

三、併發與並行

並行處理(parallel processing)是計算機系統中能同時執行兩個或者更多個處理的一種計算方法。並行處理可同時工作於同一程式的不同方面,並行處理的主要目的是節省大型和複雜問題的解決時間。

併發處理(concurrency processing)是指乙個時間段中有幾個程式都處於已經啟動執行到執行完畢之間,而且這幾個程式都是在同一處理機(cpu)上執行,但任意時刻點上只有乙個程式在處理機(cpu)上執行

併發的關鍵在於你有處理多個任務的能力,不一定同時,並行的關鍵是你有同時處理多個任務的能力,所以說,並行是併發的子集

四、程序的建立

但凡是硬體,都需要有作業系統去管理,只要有作業系統,就有程序的概念,就需要有建立程序的方式,一些作業系統只為乙個應用程式設計,比如微波爐中的控制器,一旦啟動微波爐,所有的程序都已經存在。

而對於通用系統(跑很多應用程式),需要有系統執行過程中建立或撤銷程序的能力,主要分為4中形式建立新的程序

1.系統初始化(檢視程序linux中用ps命令,windows中用任務管理器,前台程序負責與使用者互動,後台執行的程序與使用者無關,執行在後台並且只在需要時才喚醒的程序,稱為守護程序,如電子郵件、web頁面、新聞、列印)

2.乙個程序在執行過程中開啟了子程序(如nginx開啟多程序,os.fork,subprocess.popen等)

3.使用者的互動式請求,而建立乙個新程序(如使用者雙擊暴風影音)

4.乙個批處理作業的初始化(只在大型機的批處理系統中應用)

無論哪一種,新程序的建立都是由乙個已經存在的程序執行了乙個用於建立程序的系統呼叫而建立的:

在unix中該系統呼叫是:fork,fork會建立乙個與父程序一模一樣的副本,二者有相同的儲存映像、同樣的環境字串和同樣的開啟檔案(在shell直譯器程序中,執行乙個命令就會建立乙個子程序)

在windows中該系統呼叫是:createprocess,createprocess既處理程序的建立,也負責把正確的程式裝入新程序。

關於建立的子程序,unix和windows

1.相同的是:程序建立後,父程序和子程序有各自不同的位址空間(多道技術要求物理層面實現程序之間記憶體的隔離),任何乙個程序的在其位址空間中的修改都不會影響到另外乙個程序。

五、程序的終止

1.正常退出(自願,如使用者點選互動式頁面的叉號,或程式執行完畢呼叫發起系統呼叫正常退出,在linux中用exit,在windows中用exitprocess)

2.出錯退出(自願,python a.py中a.py不存在)

3.嚴重錯誤(非自願,執行非法指令,如引用不存在的記憶體,1/0等,可以捕捉異常,try...except...)

4.被其他程序殺死(非自願,如kill -9)

六、程序的層次結構

無論unix還是windows,程序只有乙個父程序,不同的是:

1.在unix中所有的程序,都是以init程序為根,組成樹形結構。父子程序共同組成乙個程序組,這樣,當從鍵盤發出乙個訊號時,該訊號被送給當前與鍵盤相關的程序組中的所有成員。

2.在windows中,沒有程序層次的概念,所有的程序都是地位相同的,唯一類似於程序層次的暗示,是在建立程序時,父程序得到乙個特別的令牌(稱為控制代碼),該控制代碼可以用來控制子程序,但是父程序有權把該控制代碼傳給其他子程序,這樣就沒有層次了。

七、程序的狀態

tail -f access.log |grep '404'

執行程式tail,開啟乙個子程序,執行程式grep,開啟另外乙個子程序,兩個程序之間基於管道'|'通訊,將tail的結果作為grep的輸入。

程序grep在等待輸入(即i/o)時的狀態稱為阻塞,此時grep命令都無法執行

其實在兩種情況下會導致乙個程序在邏輯上不能執行,

1.程序掛起是自身原因,遇到i/o阻塞,便要讓出cpu讓其他程序去執行,這樣保證cpu一直在工作

2.與程序無關,是作業系統層面,可能會因為乙個程序占用時間過多,或者優先順序等原因,而呼叫其他的程序去使用cpu。

因而乙個程序由三種狀態

八、程序併發實現

程序併發的實現在於,硬體中斷乙個正在執行的程序,把此時程序執行的所有狀態儲存下來,為此,作業系統維護一張**,即程序表(process table),每個程序占用乙個程序表項(這些表項也稱為程序控制塊)

該錶存放了程序狀態的重要資訊:程式計數器、堆疊指標、記憶體分配狀況、所有開啟檔案的狀態、帳號和排程資訊,以及其他在程序由執行態轉為就緒態或阻塞態時,必須儲存的資訊,從而保證該程序在再次啟動時,就像從未被中斷過一樣。

併發程式設計之多程序理論

顧名思義,程序即正在執行的乙個過程。程序是對正在執行程式的乙個抽象。程序的概念起源於作業系統,是作業系統最核心的概念,也是作業系統提供的最古老也是最重要的抽象概念之一。作業系統的其他所有內容都是圍繞程序的概念展開的。所以想要真正了解程序,必須事先了解作業系統,點選進入 ps 即使可以利用的cpu只有...

python併發程式設計之多程序

今天學習了python併發程式設計之多程序 一 multiprocessing模組介紹 python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源 os.cpu count 檢視 在python中大部分情況需要使用多程序。python提供了multiprocessing。multi...

python併發程式設計之多程序一

一,什麼是程序 程序是作業系統結構的基礎 是乙個正在執行的程式 計算機中正在執行的程式例項 可以分配給處理器並由處理器執行的乙個實體 二,程序與程式的區別 程序即執行中的程式,從中即可知,程序是在執行的,程式是非執行的,當然本質區別就是動態和靜態的區別。三,併發與並行解釋一 並行是指兩個或者多個事件...