pythonNet 04多工程式設計程序
poll的多路複用
p =select.poll()
功能:建立poll物件
返回值:poll物件
p.register(fd,event)
功能:註冊要關注的IO事件
引數: fd 要關注的IO物件
event 選擇要關注的事件
常用時間型別: POLLIN 讀IO事件 rlist
POLLOUT 寫IO事件 wlist
POLLERR 出錯IO xlist
POLLHUP 連線斷開事件
e.g p.register(sockfd,POLLIN |POLLERR)
p.unregister(fd)
功能:取消對IO的關注
引數:IO物件或檔案描述符
event =p.poll
功能:阻塞等待監控的IO事件發生
返回值:返回一個列表,event 是一個列表,格式如下:
[(fileno,event),()...]
其中每個元組為一個就緒的IO事件
元組中有該IO的fileno和就緒的事件型別
*需要字典配合通過fileno查詢對應的IO事件物件
{fileno:io_boj} e.g. {sockfd.fileno():sockfd}
poll_server步驟
1.建立套接字
2.將套接字設定為關注
3.建立查詢字典,並維護
4.迴圈監控IO發生
5.處理髮生的IO事件
epoll方法實現IO多路複用
使用方法: 基本與poll方法相同
*生成物件改為epoll()方法
*事件型別改為EPOLL型別
epoll特點
*epoll效率比select和poll要高
*epoll的IO監控數量比select要多
*觸發方式多(邊緣觸發)
傳送更豐富的資料結構
struct模組 結構化資料
原理; 將資料轉化為bytes格式,並且可以將bytes格式資料轉換回來
Struct(fmt)
功能;生成struct物件
引數:fmt 定製的資料結構組成
e.g.
要發的資料: 1b'zhang'1.75
組織的型別格式:Struct('i5sf')
python型別 fmt
int i
float f
bytes ns(n代表幾個字元)
返回:struct物件
st.pack(v1,v2,v3...)
功能:將資料按照制定格式打包轉換為bytes
引數;要傳送的資料
返回:打包後的bytes字串
e.g. st.pack(1,b'zhang',1.75)
st.unpack(bytes_data)
功能;將bytes字串解析為制定個數資料
引數;要解析的bytes字串
返回;元組,為解析後的內容
*struct模組可以直接呼叫pack() unpack()
此時兩個函式第一個引數為fmt
e.g.
struct.pack('i5sf',1,b'zhang',1.75)
本地套接字
功能: 本地兩程式之間傳送資料訊息
建立流程:
1.建立本地套接字
sockfd =socket(AF_UNIX,SOCK_STREAM)
2.繫結本地套接字檔案
sockffd.bind(path)
3.監聽
sockfd.listen()
4.訊息收發
send,recv
多工程式設計
意義;充分利用計算機資源提高程式的執行效率
定義:通過一定的程式設計手段,在一個程式執行中可以同時利用計算機執行多個任務,以此提高程式執行效率
實現方案;多程序 多執行緒
併發:同時處理多個任務,核心在人物間不斷地切換達到好像多個任務均被同等執行的效果,實際每個時刻只有一個任務
佔用核心
並行:多個任務利用計算機多核資源在同時執行,此時多個任務間為並行關係
程序(process)
定義:程式在計算機中的一次執行過程
程式:是一個可執行檔案,是靜態的佔有磁碟空間
程序:程序是一個動態的過程,佔有計算機資源,有一定生命週期
程序誕生
1.使用者空間通過呼叫程式介面或者命令發起程序建立請求
2.作業系統接受使用者請求,開始建立程序
3.作業系統分配計算機資源,確定程序狀態,開闢空間等
4.作業系統將穿件的程序提供給使用者使用
一些概念
cpu時間片:如果一個程序佔有cpu核心則稱這個程序在cpu時間片上
PCB(程序控制塊):在記憶體中開闢的一塊空間存放程序的基本資訊
程序ID(PID):系統為程序分配的ID號,每個程序不重複
命令:ps -aux
父子程序:系統中每一個程序都唯一的父程序,可以有多個或0個子程序,這樣形成父子程序關係
檢視程序樹 pstree
程序狀態
三態;就緒態:程序具備執行條件,等待系統分配cpu資源,
執行態:程序佔有cpu時間片正在執行
等待態:程序暫時阻塞不具備執行條件
五態:(增加新建態,和終止態)
新建態:建立一個新的程序,獲取系統資源
終止態:程序結束,釋放系統資源的過程
檢視命令:ps -aux --> STAT列
S 等待態(短暫等)
D等待態(一直等)
T等待態
R執行態
Z殭屍程序
程序優先順序
作用:決定程序的優先許可權和佔有資源的優先程度
檢視命令:top 動態檢視程序優先順序
linux優先順序範圍: -20 --19 數字越小優先順序越高
指定優先順序執行程式:
nice -9 python3 while.py 以9的優先順序執行
nice --9 python3 while.py 以-9的優先順序執行
< 有較高的優先順序
N 有較低的優先順序
+ 前臺程序
S 會話組組長
l 有連結子程序的
程序的特徵
1.程序可以使用計算機的多核資源
2.程序是計算機分配資源的最小單位
3.程序之間互不影響,各自獨立執行
4.每個程序的空間獨立,各佔有自己的空間資源
要求;
1.什麼是程序,程序和程式的區別
2.程序特徵有哪些
3.程序都有哪些狀態,各種狀態如何轉換
多程序程式設計
import os
pid =os.fork()
功能:建立新的程序
引數:無
返回值:失敗返回一個負數,
成功:在原程序中返回新程序的pid號
在新程序中返回0
注意:
*子程序會複製父程序的全部程式碼段和記憶體空間
*子程序會fork的下一句開始執行
*if elif else 結構判斷fork返回值的不同從而使父子程序執行不同的程式碼幾乎是固定的搭配
*父子程序各自獨立執行,執行順序不一定
*子程序有自己特有的內容比如PID 程序控制塊 命令集