1. 程式人生 > >Linux環境下多程序和多執行緒的優缺點

Linux環境下多程序和多執行緒的優缺點

多程序更穩定(一個執行緒掛掉整個程式掛,而一個程序掛掉不會影響其它程序)。

多執行緒更快捷(每個程序都要維護專屬的虛擬地址空間,而每個執行緒共享一個虛擬地址空間,因此從排程開銷方面考慮多執行緒佔優)。

====================================================================================================

多執行緒的優點:

無需跨程序邊界; 程式邏輯和控制方式簡單; 所有執行緒可以直接共享記憶體和變數等; 執行緒方式消耗的總資源比程序方式好; 

多執行緒缺點:

每 個執行緒與主程式共用地址空間,受限於4GB

地址空間; 執行緒之間的同步和加鎖控制比較麻煩; 一個執行緒的崩潰影響到整個程式的穩定性; 到達一定的執行緒數程度後,即使再增加CPU也無法提高效能,例如在Linux環境下,每個執行緒私有空間大約是2M,因此執行1500個左右的執行緒數就已經 極限了(當然執行緒的私用空間大小可以改變); 執行緒能夠提高的總效能有限,而且執行緒多了之後,執行緒本身的排程也是一個麻煩事兒,需要消耗較多的CPU

-----------------------------------------------------

多程序優點:

每個程序互相獨立,不影響主程式的穩定性,子程序崩潰沒關係; 通過增加CPU,就可以容易擴充效能; 可以儘量減少執行緒加鎖

/解鎖的影響,極大提高效能,就算是執行緒執行的模組演算法效率低也沒關係; 每個子程序都有4GB地址空間和相關資源,總體能夠達到的效能上限非常大。

多執行緒缺點:

邏 輯控制複雜,需要和主程式互動; 需要跨程序邊界,如果有資料量傳送,需要通過各種IPC處理。密集運算多程序排程開銷比較大; 最好是多程序和多執行緒結合,即根據實際的需要,每個CPU開啟一個子程序,這個子程序開啟多執行緒可以為若干同類型的資料進行處理。當然你也可以利用多線 程+CPU+輪詢方式來解決問題……

方法和手段是多樣的,關鍵是自己看起來實現方便有能夠滿足要求,代價也合適。

---------------------------------------------------------

程序的優點:

1)順序程式的特點:具有封閉性和可再現性;

2)程式的併發執行和資源共享。多道程式設計出現後,實現了程式的併發執行和資源共享,提高了系統的效率和系統的資源利用率。

程序的缺點:

1)作業系統排程切換多個執行緒要比切換排程程序在速度上快的多。而且程序間記憶體無法共享,通訊也比較麻煩。

執行緒之間由於共享程序記憶體空間,所以交換資料非常方便;在建立或撤消程序時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。 

執行緒的優點:

1) 它是一種非常"節儉"的多工操作方式。在Linux系統下,啟動一個新的程序必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和 資料段,這是一種"昂貴"的多工工作方式。而運行於一個程序中的多個執行緒,它們彼此之間使用相同的地址空間,共享大部分資料,啟動一個執行緒所花費的空間 遠遠小於啟動一個程序所花費的空間,而且,執行緒間彼此切換所需的時間也遠遠小於程序間切換所需要的時間。當然,在具體的系統上,這個資料可能會有較大的區 別;

2)執行緒間方便的通訊機制,由於同一程序下的執行緒之間共享資料空間,所以一個執行緒的資料可以直接為其它執行緒所用,這不僅快捷,而且方便;

3)使多CPU系統更加有效。作業系統會保證當執行緒數不大於CPU數目時,不同的執行緒運行於不同的CPU上;

4)改善程式結構。一個既長又複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨立的執行部分,這樣的程式會利於理解和修改。

執行緒的缺點: 

1)排程時要儲存執行緒狀態,頻繁排程需要佔用大量的機時; 

2)程式設計上容易出錯(執行緒同步問題)。

3)同步是往往通過加鎖來實現的,而加鎖往往是造成程式效能低下的主要原因。


相關推薦

Linux環境程序執行優缺點

多程序更穩定(一個執行緒掛掉整個程式掛,而一個程序掛掉不會影響其它程序)。 多執行緒更快捷(每個程序都要維護專屬的虛擬地址空間,而每個執行緒共享一個虛擬地址空間,因此從排程開銷方面考慮多執行緒佔優)。 ===================================

Linux環境c程序的編譯執行

環境變量 動態 main.c tor direct 環境 沒有 stdlib.h share 1 單個文件的編譯和執行創建main.c文件,內容如下: #include <stdio.h> #include <stdlib.h> int main

Linux程序執行優缺點

教科書上最經典的一句話是“程序是作業系統分配的最小單位,執行緒是CPU排程的最小單位”。 多執行緒的優點: 1)它是一種非常”節儉”的多工操作方式。在Linux系統下,啟動一個新的程序必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和資料段,這是一種”昂貴”

Linux環境如何編譯執行c程序

文件的 ron 當前 cto directory 變量 沒有 執行文件 nbsp 1 單個文件的編譯和執行 創建main.c文件,內容如下: 編譯: 執行: 2 多個文件的編譯和執行創建sum.c文件,內容如下: 創建main.c文件,內容如下: 編譯:

linux程序執行

轉載自CodeUniverse的部落格 程序:可執行程式是儲存在磁碟裝置上的由程式碼和資料按某種格式組織的靜態實體,而程序是可被排程的程式碼的動態執行。 在Linux系統中,每個程序都有各自的生命週期。在一個程序的生命週期中,都有各自的執行環境以及所需的資源,這些資訊都記錄在各自的程序控制塊中,以便系統對

Linux網路程式設計【三】:TCP伺服器程序執行(http訪問)版本

為了讓伺服器同時接受多個客戶端訪問,所以需要多程序或者多執行緒 多程序版本: #include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<sys/types.h

程序執行優缺點

在Linux下程式設計多用多程序程式設計少用多執行緒程式設計。          IBM有個傢伙做了個測試,發現切換執行緒context的時候,windows比linux快一倍多。進出最快的鎖(windows2k的

關於程序執行程序執行的網路程式設計

程序執行緒網路 多工程式設計 : 可以有效的利用計算機資源,同時執行多個任務 程序 : 程序就是程式在計算機中一次執行的過程 程序和程式的區別: 程式是一個靜態檔案的描述,不佔計算機的系統資源 程序是一個動態的過程,佔有cpu記憶體等資源,有一定的生命週期 * 同一個程式的不同執行過程即為不同的程序

Python之——Python中的程序執行

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/83042246 一、多程序 Python實現對程序的方式主要有兩種,一種方法是使用os模組中的fork方法,另一種方法是使用multiprocessing模組。區別在於:

Linux環境如何編譯執行c程式

1 單個檔案的編譯和執行 建立main.c檔案,內容如下:  編譯: 執行: 2 多個檔案的編譯和執行建立sum.c檔案,內容如下: 建立main.c檔案,內容如下:   編譯:    生成可執行檔案,檔名為main: 執行程式:

程序執行簡單tcp聊天程式

如果需要一個服務端可以連線多個客戶端,並同時與多個(不超多listen第二個引數及最大同時併發數)客戶端通訊,可以利用多程序即建立子程序,子程序來完成服務端的接受和傳送資料;也可以建立多個執行緒。對於tcp一些介面具體使用可以檢視這篇部落格:https://bl

python中的程序執行

作者:liuyazhuang  來源:CSDN  原文:https://blog.csdn.net/l1028386804/article/details/83042246?utm_source=copy  轉載出處:https://blog.csdn.net/l102838

程序執行學習

關於多程序和多執行緒,教科書上最經典的一句話是“程序是資源分配的最小單位,執行緒是CPU排程的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。 經常在網路上看到有的XDJM問“多程序好還是多執

網路程式設計實驗四——利用程序執行實現伺服器端的併發處理

一、實驗目的 1.在TCP檔案傳輸程式碼的基礎上,利用多程序實現伺服器端的併發處理。  2.利用多執行緒實現伺服器端的併發處理。 二、實驗原理 併發的面向連線伺服器演算法: 主1、建立套接字並將其繫結到所提供服務的熟知地址上。讓該套接字保持為無連線的。 主2、將

網路程式設計——4.利用程序執行實現伺服器端的併發處理

一、實驗要求     在TCP檔案傳輸程式碼的基礎上,利用單執行緒程序併發模型和多執行緒併發模型實現伺服器端的併發處理。 二、實驗分析     多執行緒與多程序相比,使用多執行緒相比多程序有以下兩個優點:更高的效率和共享儲存器,效率的提高源於上下文切換次數的減少。

執行環境使用log4j輸出各執行的標識,區分各執行輸出的內容

在多執行緒環境下,我們可能需要輸出很多資訊,每個執行緒產生的日誌資訊可能都是類似的,我們如何區分出哪些資訊是同一個執行緒輸出的呢?其實log4j已經提供了多種實現方式: 1.使用PatternLayout,在設定輸出格式的時候增加%t引數,這樣會輸出各個執行緒的執行緒名稱,這樣我們就可以根據執行緒名稱區分哪

程序執行程式設計操作

1.什麼是程序 程序是系統最小的資源管理單元,是一個程式在一個數據集上的一次動態執行過程。 2.什麼是執行緒 執行緒是計算機程式執行的實際執行者,是cpu的執行單元,在計算機中,程序主要是為了執行緒的執行進行分配資源操作,程式真正的執行者是執行緒,每一個程序至少有一個執

Linux環境原始碼編譯執行常用的兩個命令:pkg-configldconfig

        最近一段時間在研究linux伺服器叢集的相關知識,打算基於corosync和pacemaker來搭建一個linux高可用叢集, 通過編譯原始碼包來了解其依賴的動態庫,在編譯的過程中遇到一些問題,總結一些,供大家以後參考(很通用哦):        我們

gdb除錯程序執行命令

原文地址:http://blog.csdn.net/pbymw8iwm/article/details/7876797 1. 預設設定下,在除錯多程序程式時GDB只會除錯主程序。但是GDB(>V7.0)支援多程序的分別以及同時除錯,換句話說,GDB可以同時除錯多個程式

程序執行之間的通訊方式及通訊實現步驟小結

程序間通訊方式 # 管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。 # 有名管道 (namedpipe) : 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。 #