多進程筆記

昨日課程回顧:算法

  編程語言的發展:編程

    機器語言:  二進制windows

    彙編語言:  指令服務器

    高級語言:  面向過程(C)  面向對象(Python)session

  操做系統的目標:併發

    爲用戶更方便的使用異步

 

  並行:指兩件或多間事情,在同一時間點同時執行編程語言

  併發:指兩件或多見事情,在同一時間間隔內同時執行操作系統

 

  計算機組成:線程

    CPU,主板,儲存,輸入,輸出

 

  進程由三部分組成:

    代碼段,數據段,PCB(進程控制塊)

  

  進程的特徵:

    動態性:進程的實質是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。
    併發性:任何進程均可以同其餘進程一塊兒併發執行
    獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位;
    異步性:因爲進程間的相互制約,使進程具備執行的間斷性,即進程按各自獨立的、不可預知的速度向前推動


    多個不一樣的進程能夠包含相同的程序:一個程序在不一樣的數據集裏就構成不一樣的進程,能獲得不一樣的結 果;可是執行過程當中,程序不能發生改變。

 

  進程的三個基本狀態:

    就緒狀態:得到了除CPU以外運行的全部資源

    執行狀態:得到了全部資源,處於正在執行的狀態

    阻塞狀態:由於各類緣由,致使進程放棄了CPU,致使進程沒法繼續執行,此時進程處於內存中

 

  dos系統:    單用戶單任務

  windows系統:  單用戶多任務(早期的windows)

  unix系統:    多用戶多任務

 

  爲何要有操做系統?

    1 封裝了全部硬件的接口,是用戶更方便的使用

    2 對於計算機內全部資源,進行一個合理的調度和分配

 

  多進程的模塊:

    multiprocessing

    process

  

  並行 : 並行是指二者同時執行,好比有兩條車道,在某一個時間點,兩條車道上都有車在跑;(資源夠用,好比三個線程,四核的CPU )

  併發 : 併發是指資源有限的狀況下,二者交替輪流使用資源,好比只有一條車道(單核CPU資源),那麼就是A車先走,在某個時刻A車退出把道路讓給B走,B走完繼續給A ,交替使用,目的是提升效率。

  並行是從微觀上,也就是在一個精確的時間片刻,有不一樣的程序在執行,這就要求必須有多個處理器。
  併發是從宏觀上,在一個時間段上能夠看出是同時執行的,好比一個服務器同時處理多個session。

  早期單核CPU時候,沒有並行的概念,只有併發(微觀上串行,宏觀上並行)

                     站在CPU角度看  站在人的角度看就是同時有不少任務同時執行

 

 

 

    在瞭解其餘概念以前,咱們首先要了解進程的幾個狀態。在程序運行的過程當中,因爲被操做系統的調度算法控制,程序會進入幾個狀態:就緒,運行和阻塞。

  (1)就緒(Ready)狀態

  當進程已分配到除CPU之外的全部必要的資源,只要得到處理機即可當即執行,這時的進程狀態稱爲就緒狀態。

  (2)執行/運行(Running)狀態當進程已得到處理機,其程序正在處理機上執行,此時的進程狀態稱爲執行狀態。

  (3)阻塞(Blocked)狀態正在執行的進程,因爲等待某個事件發生而沒法執行時,便放棄處理機而處於阻塞狀態。引發進程阻塞的事件可有多種,例如,等待I/O完成(input)、申請緩衝區不能知足、等待信件(信號)等。

      

 

 

  同步:

      所謂同步就是一個任務的完成須要依賴另一個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列。要麼成功都成功,失敗都失敗,兩個任務的狀態能夠保持一致。

  異步:

  所謂異步是不須要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工做,依賴的任務也當即執行,只要本身完成了整個任務就算完成了。至於被依賴的任務最終是否真正完成,依賴它的任務沒法肯定,因此它是不可靠的任務序列

 

 

  from multiprocessing import Process

  獲取當前進程的pid號, os.getpid()

  獲取當前進程的父進程的pid號,  os.getppid()

 

 

  

  開啓子進程的方式:

    1  p = Process (target = func,args=(,))

        target : 是子進程要執行的任務

        arges:是父進程給子進程傳遞的參數(必須是元組的形式) 

    2  自定義類,去繼承Process

  進程的經常使用方法:

    (1)  start()    開啓一個子進程

    (2)  join()    異步變同步(就是讓父進程停留在join這句話,等待子進程執行結束,父進程在繼續執行)

    (3)  is_alive()  判斷進程是否還活着

    (4)  terminate()  殺死進程

  進程的經常使用屬性:

    (1)  p.name =           給p進程一個名字

    (2)  p.pip      返回p進程的pid

    (3)  p.daemon=True  及那個p進程設置位守護進程.(True爲守護進程,Flase爲普通進程)

      守護進程的兩個特色:

        守護進程會隨着父進程的結束而結束

        守護進程不能再建立子進程(不能要孩子)

相關文章
相關標籤/搜索