初遇python進程
計算機硬件組成
主板 固化(寄存器,是直接和cpu進行交互的一個硬件)
cpu 中央處理器:計算(數字計算和邏輯計算)和控制(控制所有硬件協調工作)
存儲 硬盤,內存
輸入設備 鍵盤,鼠標,話筒
輸出設備 顯示器,音響,打印機等
計算機發展史
第一代計算機:電子管計算機:及其耗電體積龐大,散熱量特別高
第二代計算機:晶體管計算機,
第三代計算機:白色大頭計算機,集成電路計算機,一個板子固化幾十到上百個小硬件
第四代計算機:大型集成電路計算機,一個班子可以固化十萬個硬件
第五代計算機:甚大型集成電路計算機
早期計算機是以計算為核心的
現在計算機是以存儲為核心的
計算機的操作系統
操作系統是一個軟件,是一個能直接操縱硬件的軟件.
微軟研發的windows操作系統.
人工時代:穿孔打帶
每個人都能自己在一段時間內獨享計算機所有資源
脫機時代:完全將人和機器隔離開來
單道批處理系統:內存中只允許存放一道作業.
多道批處理系統;內存中允許存放多到作業
分時系統:將cpu的執行劃分時間片,每個程序以時間片為單位去執行.
實時系統:一般比較少見,主要用於軍事和工業生產上.
dos系統 單用戶單任務 純編程系統
Windows系統 單用戶多任務(早期的Windows系統)
unix系統 多用戶多任務
為什麽要有操作系統?
1.封裝了所有硬件的接口,使用戶更方便的使用
2.對於計算機內所有資源,進行一個合理的調度和分配
無論什麽時候 ,操作系統的目標總是:讓用戶用起來更加的輕松.高可用,低耦合.
語言的發展史:
計算機識別的是二進制
機器語言:由1和0組成代碼
匯編語言:add n,m move n,m
高級語言:面向過程的語言(c),面向對象的語言(c++.java,python,.net,php)
進程的理論
.sh shell腳本文件
.out linux系統中的可執行文件
.bat 批處理腳本文件
.lib 庫文件
.exe 可執行文件,雙擊就能運行的文件
進程:
是指正在執行的程序.
是程序執行過程中的一次指令,數據集等的集合
也可以叫做程序的一次執行過程.
進程是一個動態的概念.
進程由三大部分組成:代碼段,數據段,pcb:進程管理控制
進程的三大基本狀態:
就緒狀態;已經獲得運行需要的所有資源,除了cpu
執行狀態:已進獲得所有資源,包括cpu,處於正在運行
阻塞狀態:因為各種原因,進程放棄了cpu,導致進程無法繼續執行,此時進程處於內存中,繼續等待獲取cpu進程的一個特殊狀態:
掛起狀態:是指因為各種原因,進程放棄了cpu,導致進程無法繼續執行,此時進程被踢出內存.
多進程和多進程的相關的常用方法
並行:並行是指兩者同時執行,比如有兩條車道,在某一個時間點,兩條車道上都有車在跑;(資源夠用,比如三個線程,四核的CPU )
並發:並發是指資源有限的情況下,兩者交替輪流使用資源,比如只有一條車道(單核CPU資源),那麽就是A車先走,在某個時刻A車退出把道路讓給B走,B走完繼續給A ,交替使用,目的是提高效率。
區別:
並行是從微觀上,也就是在一個精確的時間片刻,有不同的程序在執行,這就要求必須有多個處理器。
並發是從宏觀上,在一個時間段上可以看出是同時執行的,比如一個服務器同時處理多個session。
註意:早期單核CPU時候,對於進程也是微觀上串行(站在cpu角度看),宏觀上並行(站在人的角度看就是同時有很多程序在執行)。
同步:所謂同步就是一個任務的完成需要依賴另外一個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列
。要麽成功都成功,失敗都失敗,兩個任務的狀態可以保持一致。
異步:所謂異步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什麽工作,依賴的任務也立即執行,只要自己完成了整個任務就算完成了
。至於被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列
。
阻塞與非阻塞
阻塞和非阻塞這兩個概念與程序(線程)等待消息通知(無所謂同步或者異步)時的狀態有關。也就是說阻塞與非阻塞主要是程序(線程)等待消息通知時的狀態角度來說的
進程的相關操作
multiprocessing模塊:
仔細說來,multiprocessing不是一個模塊而是python中一個操作、管理進程的包。 之所以叫multi是取自multiple的多功能的意思,在這個包中幾乎包含了和進程有關的所有子模塊。由於提供的子模塊非常多,為了方便大家歸類記憶,我將這部分大致分為四個部分:創建進程部分,進程同步部分,進程池部分,進程之間數據共享。
進程的開啟方法:
1.p = Process(target = None,args(,))
def func(i): time.sleep(1) print(‘這裏是兒子進程,兒子自己的pid是%s,兒子的父進程的pid是%s‘%(os.getpid(),os.getppid())) # os.getpid()獲取的是當前進程自己的pid # os.getppid()獲取的是當前進程的父進程的pid if __name__ == ‘__main__‘: p = Process(target=func,args=(1,))# 實例化一個進程對象 p.start()# 開啟一個子進程 print(‘這裏是父親進程,父進程自己的pid是:%s,父親的父親的pid是%s‘%(os.getpid(),os.getppid()))
2.自定義類,繼承process父類
class MyProcess(Process): def __init__(self): super(MyProcess, self).__init__() def run(self): print(‘這是以繼承類的方式開啟的子進程‘) if __name__ == ‘__main__‘: p1 = MyProcess() p1.start()# 是指,解釋器告訴操作系統,去幫我開啟一個進程, 就緒狀態
進程的常用方法:
1.start() 開啟一個子進程
2.join() 異步變同步(就是讓父類進程停留在join這句話,等待子進程執行結束,父進程在繼續執行)
3.is_alive() 判斷進程是否還活著.
4.terminate 殺死進程
進程的常用屬性:
1.p.name = 給p進程一個名字
2.p.pid 返回p進程的pid
3.p.daemon = True 將p進程設置為守護進程.(True為守護進程,False為普通進程)
守護進程的兩個特點:
守護進程會隨著父進程的結束而結束
守護進程不可以再創建子進程(不能要孩子)
初遇python進程