1. 程式人生 > >初遇python進程

初遇python進程

劃分 鼠標 狀態 rmi unix 目的 幫我 ESS 鍵盤

計算機硬件組成

  主板    固化(寄存器,是直接和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進程