進程--python
阿新 • • 發佈:2019-01-08
star elf args 多級反饋 多級 保存狀態 等待 優先 進程調度
進程:正在執行的一個過程,是對正在運行程序的一個抽象
操作系統:推薦閱讀《操作系統原理》 《現代操作系統》
IO操作
進程調度:多個進程交替運行,操作系統必須對這些進程進行調度,這個調度也不是隨即進行的,而是需要遵循一定的法則。
- 先來先服務調度法
- 短作業優先調度法
- 時間片論轉法
- 多級反饋隊列
並發與並行
***多道程序系統(程序之間的切換運行,保存狀態叫做並發(偽並行))
並行是理想狀態,源於多個cpu運行(多核技術)
同步異步(任務的提交方式,異步:多個任務同時提交出去,同時執行)
同步/異步 與 阻塞和非阻塞
- 同步阻塞形式(效率低,排隊)
- 異步阻塞形式 (異步操作是可以被阻塞的,只不過它不是在處理消息時阻塞的)
- 同步非阻塞形式(開線程)
- 異步非阻塞形式(效率最高)
空間復用 時間復用è充分利用內存,提高代碼運行效率
硬件上內存隔離解決程序切換的不安全
分時系統:常用(每個程序執行一點時間)
實時系統:高進度行業,不切換
進程的創建:
- 系統初始化
- 一個進程在運行過程中開啟了子進程(常用)
- 用戶的交互式請求,而創建的一個新進程(如用戶雙擊暴風影音)
- 一個批處理作業的初始化(只在大型機的批處理系統中應用)
進程結束:
- 正常退出(自願)
- 出錯退出(自願)
- 嚴重錯誤(非自願,執行非法指令,如引用不存在的內存)
- 被其他進程殺死
進程並發的實現
import time from multiprocessing importProcess def f1(): time.sleep(3) print(‘aaaa’) def f2(): time.sleep(3) print(‘bbb’) f1() #排隊進行共6s 串行執行 f2() if __name__ == ‘__main__’: p1 = Process(target = f1,) p2 = Process(target = f2,) p1.start() #給操作系統發信號創建進程,輸出順序不一定 p2.start() #多進程,有I/O切換執行,耗時3s左右,並發代碼運行效率提高了一倍p1.join() #主進程等待子進程,如果沒有join命令,會繼續執行主進程,CPU執行代碼速度快於操作系統 p2.join() print(‘主進程’)
for 循環創建進程
import time from multiprocessing import Process def f1(n): time.sleep(3) print(i) if __name__ == ‘__main__’: for i in range(20): p1 = Process(target = f1,args=(i,)) # i為傳入參數或者kwargs ={‘n’:’i’} p1.start() #多進程執行順序操作系統決定
繼承的形式創建進程
class MyProcess(Process): #繼承類創建進程對象 def __init__(self,n): super().__init__() #執行父類的init self.n = n def run(self): print(‘a and %s’%self.n) if __name__ == ‘__main__’: p1 = Myprocess(‘b’) p1.start() #a and b
進程--python