Python的線程、進程和協程 - 邱乘屹的個人技術博客

什麼是線程、進程?

什麼是進程?

1. 進程是資源分配最小單位
2. 當一個可執行程序被系統執行(分配內存等資源)就變成了一個進程

3. 程序並不能單獨運行,只有將程序裝載到內存中,系統爲它分配資源才能運行,這種執行的程序就稱之爲進程
4. 程序和進程的區別就在於:程序是指令的集合,它是進程運行的靜態描述文本;進程是程序的一次執行活動,屬於動態概念
3. 在多道編程中,我們允許多個程序同時加載到內存中,在操作系統的調度下,可以實現併發地執行。
4. 進程的出現讓每個用戶感覺到自己獨享CPU,因此,進程就是爲了在CPU上實現多道編程而提出的。
5. 進程之間有自己獨立的內存,各進程之間不能相互訪問
6. 創建一個新線程很簡單,創建新進程需要對父進程進行復制

進程的優點

提供了多道編程,讓我們感覺我們每個人都擁有自己的CPU和其他資源,可以提高計算機的利用率
(多道編程概念
多道編程: 在計算機內存中同時存放幾道相互獨立的程序,他們共享系統資源,相互穿插運行
單道編程: 計算機內存中只允許一個的程序運行)

進程的缺點

  1. 進程只能在一個時間幹一件事。
  2. 進程在執行的過程中如果阻塞,即使進程中有些工作不依賴於輸入的數據,也將無法執行(例如等待輸入,整個進程就會掛起)

進程間互相訪問數據的四種方法

注:不同進程間內存是不共享的,所以互相之間不能訪問對方數據

  1. 利用Queues實現父進程到子進程(或子進程間)的數據傳遞
  2. 使用管道pipe實現兩個進程間數據傳遞
  3. Managers實現很多進程間數據共享
  4. 藉助redis中間件進行數據共享

什麼是線程?

1. 線程是操作系統調度的最小單位它被包含在進程之中,是進程中的實際運作單位
2. 進程本身是無法自己執行的,要操作cpu,必須創建一個線程,線程是一系列指令的集合
3. 線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位

4. 一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務
5. 無論你啓多少個線程,你有多少個cpu, Python在執行的時候會淡定的在同一時刻只允許一個線程運行
6. 同一個進程中的各線程可以相互訪問資源,線程可以操作同進程中的其他線程,但進程僅能操作子進程

進程和線程的區別

  1. 進程包含線程
  2. 線程共享內存空間
  3. 進程內存是獨立的(不可互相訪問)
  4. 進程可以生成子進程,子進程之間互相不能互相訪問(相當於在父級進程克隆兩個子進程)
  5. 在一個進程裏面線程之間可以交流。兩個進程想通信,必須通過一箇中間代理來實現
  6. 創建新線程很簡單,創建新進程需要對其父進程進行克隆。
  7. 一個線程可以控制或操作同一個進程裏面的其它線程。但進程只能操作子進程。
  8. 線程可以幫助應用程序同時做幾件事

什麼是協程?

協程,又稱微線程,纖程

作用

在執行一個函數的時候,可以隨時停止,去執行另一個函數,然後中斷再去執行第一個函數,類似於多線程,但協程只有一個線程在執行

協程的優勢

協程可以很完美的處理IO密集型的問題,但是處理cpu密集型並不是他的長處。要充分發揮CPU的性能,可以結合多進程+多線程的方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章