1. 程式人生 > >03: 進程、線程、協程

03: 進程、線程、協程

中一 多個進程 執行 -s 依賴 主線程 16px 使用 概念

1.1 進程與線程簡介

  1、什麽是進程(process)?(進程是資源集合)

      1. 程序並不能單獨運行,只有將程序裝載到內存中,系統為它分配資源才能運行,這種執行的程序就稱之為進程

      2. 程序和進程的區別就在於:程序是指令的集合,它是進程運行的靜態描述文本;進程是程序的一次執行活動,屬於動態概念

      3. 在多道編程中,我們允許多個程序同時加載到內存中,在操作系統的調度下,可以實現並發地執行。

      4. 進程的出現讓每個用戶感覺到自己獨享CPU,因此,進程就是為了在CPU上實現多道編程而提出的。

      5. 進程之間有自己獨立的內存,各進程之間不能相互訪問

      6. 創建一個新線程很簡單,創建新進程需要對父進程進行復制

      多道編程: 在計算機內存中同時存放幾道相互獨立的程序,他們共享系統資源

      單道編程: 計算機內存中只允許一個的程序運行

  2、有了進程為什麽還要線程?

    1. 進程優點:

提供了多道編程,讓我們感覺我們每個人都擁有自己的CPU和其他資源,可以提高計算機的利用率

    2. 進程的兩個重要缺點

a. 第一點:進程只能在一個時間幹一件事,如果想同時幹兩件事或多件事,進程就無能為力了。

b. 第二點:進程在執行的過程中如果阻塞,例如等待輸入,整個進程就會掛起,即使進程中有些工作不依賴於輸入的數據,也將無法執行。

c. 例如,我們在使用qq聊天, qq做為一個獨立進程如果同一時間只能幹一件事,那他如何實現在同一時刻 即能監聽鍵盤輸入、又能監聽其它人給你發的消息

d. 你會說,操作系統不是有分時麽?分時是指在不同進程間的分時呀

e. 即操作系統處理一會你的qq任務,又切換到word文檔任務上了,每個cpu時間片分給你的qq程序時,你的qq還是只能同時幹一件事呀

  3、什麽是線程(thread)(線程是操作系統最小的調度單位)

      1. 線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位

      2. 一條線程指的是進程中一個單一順序的控制流,一個進程中可以並發多個線程,每條線程並行執行不同的任務

      3. 無論你啟多少個線程,你有多少個cpu, Python在執行的時候會淡定的在同一時刻只允許一個線程運行

      4. 進程本身是無法自己執行的,要操作cpu,必須創建一個線程,線程是一系列指令的集合

      5. 所有在同一個進程裏的線程是共享同一塊內存空間的,不同進程間內存空間不同

      6. 同一個進程中的各線程可以相互訪問資源,線程可以操作同進程中的其他線程,但進程僅能操作子進程

      7. 兩個進程想通信,必須要通過一個中間代理

      8. 對主線程的修改可能回影響其他子線程,對主進程修改不會影響其他進程因為進程間內存相互獨立,但是

       同一進程下的線程共享內存

  4、進程和線程的區別

      啟動一個線程比啟動一個進程快,運行速度沒有可比性。

      先有一個進程然後才能有線程。

      1、進程包含線程

      2、線程共享內存空間

      3、進程內存是獨立的(不可互相訪問)

      4、進程可以生成子進程,子進程之間互相不能互相訪問(相當於在父級進程克隆兩個子進程)

      5、在一個進程裏面線程之間可以交流。兩個進程想通信,必須通過一個中間代理來實現

      6、創建新線程很簡單,創建新進程需要對其父進程進行克隆。

      7、一個線程可以控制或操作同一個進程裏面的其它線程。但進程只能操作子進程。

      8、父進程可以修改不影響子進程,但不能修改。

      9、線程可以幫助應用程序同時做幾件事

  5、進程和程序的區別

      1. 程序只是一個普通文件,是一個機器代碼指令和數據的集合,所以,程序是一個靜態的實體

      2. 而進程是程序運行在數據集上的動態過程,進程是一個動態實體,它應創建而產生,應調度執行因等待資

       源或事件而被處於等待狀態,因完成任務而被撤消

      3. 進程是系統進行資源分配和調度的一個獨立單位

      4.一個程序對應多個進程,一個進程為多個程序服務(兩者之間是多對多的關系)

      5. 一個程序執行在不同的數據集上就成為不同的進程,可以用進程控制塊來唯一地標識每個進程

1.2 多線程

03: 進程、線程、協程