python多工程式設計之多程序程式設計
多工程式設計:
意義:充分利用計算機資源,同時執行多個任務,提高程式
整體的執行效率
定義:通過程式利用計算機的多個核心 達到同時執行多個任務的目的
以此達到提升程式執行效率的目的
實施方案:多程序程式設計 多執行緒程式設計
並行:多個計算機核心在同時處理多個任務,這時多個任務之間是並行關係
併發:同時執行多個任務,核心在多個任務間不斷切換,達到多個任務都會被執行處理的效果,
程序:程式在計算機中的一次執行過程
程式:是一個可執行檔案,是靜態的,佔有磁碟,不佔計算機
的執行資源
程序:程序是一個動態的過程,佔有計算機資源,有一定的生命週期
*同一個程式不同的執行過程是不同的程序,因為分配的資源
和生命週期都不相同
程序的建立流程:
1.使用者啟動一個程式或者呼叫介面發起程序建立
2.操做系統接收使用者請求分配計算機資源建立程序
3.操做系統將一定狀態的程序提高給使用者使用
4.使用者利用操做系統提供的程序完成任務
程序相關的概念:
cpu時間片:
如果一個程序佔有cpu此時我們稱為該程序佔有cpu時間片
多個程序任務會輪流佔有cpu時間片形成併發效果
程序資訊:
PCB (程序空值塊):程序建立後會自動在記憶體生產一個空間存放程序資訊
程序資訊:程序ID 程序佔用記憶體位置 建立時間 建立使用者
檢視系統該程序資訊:ps -aux
PID(process ID):在操做系統中每個程序都有唯一的PID值是由系統分配的。
程序特徵
*程序是操做系統分配資源的最小單元
*每個程序擁有自己獨立的執行空間(虛擬記憶體空間)
*程序之間執行相互獨立,互不影響
程序的狀態
三態
*就緒態:程序具備執行條件,等待系統分配處理器,資源進入執行狀態
*執行態:程序佔有cpu處於執行狀態
*等待態:程序暫時不具備執行條件,需要阻塞等待
五態(三態基礎上新增新建和終止)
*新建:建立一個新的程序,獲取系統資源的過程
*終止:程序執行結束,釋放資源的過程
ps -aux ————–> STAT表示程序狀態
D:表示等待態 阻塞 不可中斷等待態
S:表示等待態 睡眠 可中斷等待態
T:表示等待態 暫停 暫停執行
R:執行態(就緒態)
Z:殭屍
+:前臺程序
<:較高優先順序的程序
N:較低優先順序的程序
s:會話組
l:有程序連線
程序的優先順序:
top 動態檢視程序的優先順序
< > 進行翻頁 q退出
程序優先順序的取值範圍:-20 ~ 19 -20最高
nice:以指定的優先順序執行一個程式
nice -9 ./while.py 表示以9的優先順序執行
sudo –9 ./while.py 表示以-9優先順序執行
cookie
首行新增
!/usr/bin/python3
修改程式許可權,新增可執行許可權
chmod 775 while.py
可以直接指明路經執行
./while.py
父子程序
在系統中除了初始化程序每個程序都有一個父程序,可能有0和或多個
子程序,由此形成程序額度父子關係
便於程序管理,父程序發起建立子程序請求
檢視程序樹:pstree
檢視父子程序PID:ps -ajx
要求:
1.瞭解什麼是程序,程序和程式的區別
2.瞭解程序的特徵和基本概念
3.理解併發並行的區別
4.清楚程序的狀態轉換
os.fork 建立程序
pid = os.fork()
功能:建立程序
返回值:失敗返回一個負數
成功在原有程序中返回新程序的PID號,在新程序中返回0
*子程序會複製符程序全部記憶體空間包括程式碼段
*子程序會從fork的下一句開始執行
*父程序中fork返回值即為新建立子程序額度PID號
*父子程序不一定誰先執行。執行上互不干擾搶佔時間片
*使用if語句結構是父子程序執行不同程式碼段幾乎是fork
建立程序的固定結構
*在子程序中對變數等其他內容的修改 不會影響父程序中的內容
*子程序雖然複製父程序內容,但是業有自己特有的屬性特徵
比如:pid號 pcb記憶體空間等
獲取程序PID
os.getpid()
功能:獲取程序的PID號
返回值:返回程序的PID號
os.getppid()
功能:獲取符程序的pid號
返回值:返回符程序的PID號
程序退出
os._exit(status)
功能:退出一個程序
引數:程序的退出狀態 整數
sys.exit([status])
功能:退出一個程序
引數:預設為0
如果傳入一個整數則同 _exit()
如果傳入一個字串,則在退出時列印該字串
**sys.exit() 可以通過捕獲 SystemExit異常來阻止退出
os._exit()不能通過異常阻止