1. 編程語言的發展: 編程
機器語言(二進制) 混編語言(指令,命令形式) 高級語言(面向過程/面向對象)併發
2. 操做系統的目標: 方便用戶使用,低耦合,高可用異步
計算機組成: cpu,主板,存儲設備,輸入設備,輸出設備編程語言
3. 並行: 指同一時間點,有多個程序在同時進行函數
併發: 指同一時間斷內,多個程序都不分前後的依次被執行過spa
4. 進程的組成: 代碼段,數據段,PCB(進程控制塊)操作系統
進程的三個基本狀態:對象
1)就緒狀態: 得到了除CPU以外運行所須要的全部資源繼承
2)執行狀態: 得到了全部資源,處於正在執行的狀態接口
3)阻塞狀態: 因各類緣由,致使進程放棄了CPU,進程處於內存中,沒有繼續執行
特殊狀態: 掛起狀態,瞭解便可, 放棄CPU,也不在內存中.
5. 操做系統的做用:1.封裝了所欲硬件接口,方便用戶使用; 2.對計算機內全部資源,進
行統一的調度和分配
6. 多進程相關概念: 並行,併發,同步,異步,阻塞,非阻塞
注: 早期CPU是單核時,沒有並行的概念,只有併發(微觀上串行,宏觀上並行)
獲取當前進程的pid號: os.getpid(); 獲取當前進程父進程的pid號: os.getppid()
開啓子進程的兩種方式:
1) p=Process( target=函數名, args=(參數1,參數2...) ) 當定義的函數不須要參數時,args能夠沒有
2) 自定義個類,去繼承process
進程的經常使用方法:
p.start() 告知操做系統,給開啓個子進程.本質調用的p.run()
p.join() 異步變同步(等待子進程結束,再執行join下的主進程代碼)
p.is_alive() 打印便可,用來判斷p進程是否還活着,結果爲True或False
p.terminate() 告知操做系統,結束掉p進程
進程的經常使用屬性:
p.name=’xxx’ 用在主程序裏if判斷下,用來給子進程p來命名的
p.pid 注意,pid後是不帶括號的,用來查詢子進程p的pid.注意區分os.getpid()
p.pid是用在主進程中查p的pid的,os.getpid()是用來查當前進程的pid的
p.daemon=True 將p進程設置爲守護進程(daemon=後默認是false,即普通進程) 普通進程是當全部子進程都結束後主進
程才結束,(此時主進程中的全部代碼都已經執行完了,程序會停在最後的空白處,注意和p.join()區分開).守
護進程是指:當主進程結束後子進程便會當即結束.且守護進程不能再建立子進程.注意:p.daemon=True 必
須放在p.start()以前才能生效...必考daemon寫法
演示:
from multiprocessing import Process 導入模塊
n=1000
def fun(n):
print(‘這是第%s次’ % (n) )
print(‘子進程和主進程的pid分別是:’ , os.getpid() , os.getppid() )
if __name__ == ‘__main__’:
n=1
p=process( target=fun, args=(n,)) 實列個對象,對象目標是fun,args後的東西是給目標fun函數
傳的參數,必須是個元組,參數有多個時以逗號隔開,不須要參數時可不寫,當傳的參數和子進程
中的衝突時,以主進程爲準. 列中打印的n值爲1, 當主不傳n時,打印的結果爲1000
p.daemon=True 表示把子程p設爲守護進程,必須在start前,且子進程內不能有開啓子進程的代碼
p.start() 告知操做系統開啓個進程,內容p中的全部
p.join() 是讓主進程呆在這裏,等p子進程結束後再往下執行主進程代碼
p.terminate() 告知操做系統殺死這個p進程
print(p.is_alive) 查看p進程是否還活着
p.name=’xxx’ 把子進程p命名爲xxx
print( p.name , p.pid , p.daemon ) 分別是用來查看子進程p的名字,pid和是否爲守護進程