1. 程式人生 > >進程--python

進程--python

star elf args 多級反饋 多級 保存狀態 等待 優先 進程調度

進程:正在執行的一個過程,是對正在運行程序的一個抽象

操作系統:推薦閱讀《操作系統原理》 《現代操作系統》

IO操作

進程調度:多個進程交替運行,操作系統必須對這些進程進行調度,這個調度也不是隨即進行的,而是需要遵循一定的法則。

  1. 先來先服務調度法
  2. 短作業優先調度法
  3. 時間片論轉法
  4. 多級反饋隊列

並發與並行

***多道程序系統(程序之間的切換運行,保存狀態叫做並發(偽並行))

並行是理想狀態,源於多個cpu運行(多核技術)

同步異步(任務的提交方式,異步:多個任務同時提交出去,同時執行)

同步/異步 與 阻塞和非阻塞

  1. 同步阻塞形式(效率低,排隊)
  2. 異步阻塞形式 (異步操作是可以被阻塞的,只不過它不是在處理消息時阻塞的)
  3. 同步非阻塞形式(開線程)
  4. 異步非阻塞形式(效率最高)

空間復用 時間復用è充分利用內存,提高代碼運行效率

硬件上內存隔離解決程序切換的不安全

分時系統:常用(每個程序執行一點時間)

實時系統:高進度行業,不切換

進程的創建:

  1. 系統初始化
  2. 一個進程在運行過程中開啟了子進程(常用)
  3. 用戶的交互式請求,而創建的一個新進程(如用戶雙擊暴風影音)
  4. 一個批處理作業的初始化(只在大型機的批處理系統中應用)

進程結束:

  1. 正常退出(自願)
  2. 出錯退出(自願)
  3. 嚴重錯誤(非自願,執行非法指令,如引用不存在的內存)
  4. 被其他進程殺死

進程並發的實現

import time
from multiprocessing import
Process 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