什麼是線程、進程?
什麼是進程?
1. 進程是資源分配最小單位
2. 當一個可執行程序被系統執行(分配內存等資源)就變成了一個進程
3. 程序並不能單獨運行,只有將程序裝載到內存中,系統爲它分配資源才能運行,這種執行的程序就稱之爲進程
4. 程序和進程的區別就在於:程序是指令的集合,它是進程運行的靜態描述文本;進程是程序的一次執行活動,屬於動態概念
3. 在多道編程中,我們允許多個程序同時加載到內存中,在操作系統的調度下,可以實現併發地執行。
4. 進程的出現讓每個用戶感覺到自己獨享CPU,因此,進程就是爲了在CPU上實現多道編程而提出的。
5. 進程之間有自己獨立的內存,各進程之間不能相互訪問
6. 創建一個新線程很簡單,創建新進程需要對父進程進行復制
進程的優點
提供了多道編程,讓我們感覺我們每個人都擁有自己的CPU和其他資源,可以提高計算機的利用率
(多道編程概念
多道編程: 在計算機內存中同時存放幾道相互獨立的程序,他們共享系統資源,相互穿插運行
單道編程: 計算機內存中只允許一個的程序運行)
進程的缺點
- 進程只能在一個時間幹一件事。
- 進程在執行的過程中如果阻塞,即使進程中有些工作不依賴於輸入的數據,也將無法執行(例如等待輸入,整個進程就會掛起)
進程間互相訪問數據的四種方法
注:不同進程間內存是不共享的,所以互相之間不能訪問對方數據
- 利用Queues實現父進程到子進程(或子進程間)的數據傳遞
- 使用管道pipe實現兩個進程間數據傳遞
- Managers實現很多進程間數據共享
- 藉助redis中間件進行數據共享
什麼是線程?
1. 線程是操作系統調度的最小單位它被包含在進程之中,是進程中的實際運作單位
2. 進程本身是無法自己執行的,要操作cpu,必須創建一個線程,線程是一系列指令的集合
3. 線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位
4. 一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務
5. 無論你啓多少個線程,你有多少個cpu, Python在執行的時候會淡定的在同一時刻只允許一個線程運行
6. 同一個進程中的各線程可以相互訪問資源,線程可以操作同進程中的其他線程,但進程僅能操作子進程
進程和線程的區別
- 進程包含線程
- 線程共享內存空間
- 進程內存是獨立的(不可互相訪問)
- 進程可以生成子進程,子進程之間互相不能互相訪問(相當於在父級進程克隆兩個子進程)
- 在一個進程裏面線程之間可以交流。兩個進程想通信,必須通過一箇中間代理來實現
- 創建新線程很簡單,創建新進程需要對其父進程進行克隆。
- 一個線程可以控制或操作同一個進程裏面的其它線程。但進程只能操作子進程。
- 線程可以幫助應用程序同時做幾件事
什麼是協程?
協程,又稱微線程,纖程
作用
在執行一個函數的時候,可以隨時停止,去執行另一個函數,然後中斷再去執行第一個函數,類似於多線程,但協程只有一個線程在執行
協程的優勢
協程可以很完美的處理IO密集型的問題,但是處理cpu密集型並不是他的長處。要充分發揮CPU的性能,可以結合多進程+多線程的方式。