進程、線程、攜程的定義以及性能的比較


1.什么是進程、線程、協程?區別?優缺點?
定義:
(1)進程是系統進行資源分配和調度的獨立單位

(2)線程是進程的實體,是CPU調度和分配的基本單位

(3)協程,又稱微線程,自帶CUP上下文,是比線程更小的執行單元,占用資源小,效率高

區別:
(1)一個程序至少有一個進程,一個進程至少有一個線程

(2)線程的划分尺度小於進程(資源比進程少),使得多線程程序的並發性高

(3)進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大的提高了程序的運行效率

(4)線程不能夠獨立執行,必須依存在進程總

優缺點:
進程:

優點:順序程序的特點:既有封閉性和可再現性

程序的並發執行和資源共享,多道程序設計出現后,實現了程序的並發執行和資源共享,提高了系統的效率和系統的資源利用率

缺點:操作系統調度切換多個線程比切換調度進程在速度上快的多,而且進程間內存無法共享,通訊也比較麻煩。

線程之間由於共享進程內存空間,所以交換數據非常方便,在創建或撤銷進程時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於創建或撤銷線程時的開銷

線程:

優點:

它是一種非常”節儉”的多任務操作方式。在Linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種”昂貴”的多任務工作方式。而運行於一個進程中的多個線程,它們彼此之間使用相同的地址空間,共享大部分數據,啟動一個線程所花費的空間遠遠小於啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小於進程間切換所需要的時間。當然,在具體的系統上,這個數據可能會有較大的區別;線程間方便的通信機制,由於同一進程下的線程之間共享數據空間,所以一個線程的數據可以直接為其它線程所用,這不僅快捷,而且方便;使多CPU系統更加有效。操作系統會保證當線程數不大於CPU數目時,不同的線程運行於不同的CPU上;

缺點:調用時,要保存線程狀態,頻繁調度,需要占用大量的機時

程序設計上容易出錯(線程同步問題)

 

 

2.多進程、多線程優缺點
1.多線程的優點:

無需跨進程邊界

程序邏輯和控制方式簡單

所有線程可以直接共享內存和變量等

線程方式消耗的總資源比進程方式好

缺點:

每個線程與主程序共用地址空間,受限於2GB地址空間

線程之間的同步和加鎖控制比較麻煩

一個線程的崩潰可能影響到整個程序的穩定性

到達一定的線程數程度后,即使再增加cpu也無法提高性能

線程能夠提高的總性能有限,並且線程多了之后,線程本身的調度也是一麻煩事情,需要消耗較多的CPU

 

3.針對於爬蟲 應 選擇多線程還是多進程?
多進程:密集CPU任務,需要充分使用多核CPU資源(服務器,大量的並行計算的時候)用多進程

缺點:多個進程之間通信成本高,切換開銷大

多線程:密集I/O任務(網絡I/O 磁盤I/O 數據庫I/O)使用多線程合適

缺點:同一個時間切片只能運行一個線程,不能做到高並行,但是可以做到高並發

協程:又稱微線程,在單線程上執行多個任務,用函數切換,開銷極小,不通過操作系統調度,沒有線程。進程的切換開銷

多線程請求返回是無序的,哪個線程有數據返回就處理哪個線程,而協程返回的數據是有序的

缺陷:單線程執行,處理密集CPU和本地磁盤IO的時候,性能較低。處理網絡I/O性能還是比較高.

總體來看 ,多線程是最佳人選


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM