1. 程式人生 > >C/S架構與多程序多執行緒

C/S架構與多程序多執行緒

C/S架構與多程序多執行緒

如題,C/S架構指的是伺服器(Server)與客戶機(Client)協作完成網路程式功能的一種模式。它是已經在計算機世界活躍數十年的一種古老的軟體架構。如今已滲入到各領域IT系統中。其模型如下所示。

本文從以下3個方面闡述C/S架構軟體設計與多程序多執行緒實現多工框架。

1.C/S工作原理

2.多工設計

3.多程序與多執行緒選擇

1.C/S工作原理

從計算機技術發展到應用到通訊金融等商業領域時候起,C/S模式的需求就隨之誕生了。

其工作模式能夠滿足眾多客戶的計算機使用需求,且能夠簡化程式設計的過程,還能夠實現網路共享,因此備受追捧。時至今日,已有千千萬萬的

C/S模式的程式為我們的生活帶來了諸多方便,使人類進入了離不開網路的新時代。小到生活各個角落,如線上交際(QQ,微信,微博等),大到通訊商業領域,如行動通訊(手機上網,通話等等),電子證券(交易大廳股市圖重新整理等等),可以不誇張的說,各行各業都在使用計算機,使用計算機的地方就有C/S模式。如上圖,客戶端(Client)通過網路(Internet)與伺服器(Server)之間建立通訊,獲取伺服器的資料或是運算結果,或者多客戶端同時聯通伺服器,建立交際網實現多人線上活動。

舉一個生活中普遍存在的例子,就是我們日常生活裡常用的QQ和微信(今天是2015年,東方文明的人們正使用著叫做QQ和微信的軟體,與家人朋友同事甚至網路陌生好友進行著無間隙線上溝通。也許若干年後人類子孫後代不再使用今天我們創造的科技。故而備註於此

)

QQ後臺的伺服器執行著服務端軟體,它就像一個魔怪,能夠一人對付萬千客戶端的服務請求。如下圖所示,可以形象地看到伺服器承擔著什麼樣的角色。同時,客戶機做什麼呢?

根據使用者需要,將要發燒的指令傳達給伺服器,然後伺服器完成任務後將結果傳回,客戶機負責翻譯成使用者可理解的語言展示。比如,我們要跟某好友聊天了,就通過QQ客戶端點選好友頭像。此時客戶端就將要跟此好友聊天的請求傳送給伺服器,然後我們就開始輸入聊天內容了,然後伺服器再將此內容傳送到好友的QQ客戶端上。如此一來,線上聊天功能就實現了。

當然,伺服器可以幹很多事情,可以同時幹很多事情,所以呢,就會有不同的客戶端來請求不同的服務,伺服器根據各自的需求做出相應的處理。如下圖,騰訊的各服務關係示意圖,展示了騰訊伺服器響應著眾多客戶端的請求。

2.多工設計

現在我們來討論下多工。本節談論的技術是針對服務端而言的。當客戶端數量眾多時,過去單程序模式的伺服器做不到同時響應全部客戶請求,此時服務體驗必然不良,因而多工的概念隨之而來。當有多個客戶端請求時,服務端生成多個獨立的任務子模組,分別服務不同的客戶,對客戶而言,伺服器始終是獨立地在服務於自己。

舉個例子,若訪問搜尋引擎,如果伺服器是單個服務,則多人訪問時就需要排隊等待,前面的客戶訪問時間越長,後面的客戶等待地越久。試想,當你急需要搜尋查詢某個內容的時候,伺服器卻告訴前面有一千萬人排隊,你的對要排到下個世紀,這樣的搜尋引擎你下次還會使用嗎?

所以,伺服器的多工是勢在必行的,多工的設計就能保證伺服器能夠同時服務於多人。

當然,單個伺服器的能力是有限的,即便實現多工,也無法承擔日訪問量上億PV的負荷,這個就需要多伺服器協調工作,這便是當下流行的叢集技術(本知識點以後再論,本文不再贅述)。多工就像三頭六臂一樣幫助伺服器實現多請求並行響應。

3.多程序與多執行緒選擇

好了,我們已經知道了伺服器是叢集化的,且每臺伺服器都是多工的。現在我們來討論多工的實現方式。最早的多工技術就是多程序了,後來經過技術發展,引入了更為輕量級的多執行緒概念。如今的作業系統,都支援多程序以及多執行緒。那麼,在開發伺服器軟體的時候,到底用多程序還是多執行緒來實現多工呢?這個得根據實際任務需要,以及採用的網路模型來決定的。(注:關於多程序多執行緒特性不是本文重點,請讀者參閱相關文獻)

TCP/IP協議族中,使用頻率最高的上層協議無非是TCPUDPHTTP3者了。其中HTTP用在B/S架構(關於B/S架構更多的內容請查閱相關文獻)通訊中,前兩種協議用在C/S架構中。(注:關於TCPUDP等協議相關知識,也請讀者參閱相關文獻)

眾所周知,TCP是面向連線的,UDP面向非連線。同時,多程序間是資源隔離的,多執行緒間是資源共享的。基於以上原因,從程式設計難易程度上說:

採用TCP協議的軟體用多程序更簡單,採用UDP協議的軟體二者都可。

這並不是唯一的,只是基於各人的經驗,以及技術特性導致的複雜程度不同作為參考標準。

實質上,不管採用什麼協議,採用任何多工技術都可以在理論上實現。然而,軟體追求的是高效和穩定,所以在實際軟體設計中,便會參考軟體的實現難度和維護性等指標。

下面根據經驗簡單闡述協議與多工方式的組合特點:

1. TCP+多程序,由於TCP是面向連線的,而一個伺服器的單程序空間內如果多個子任務都能看到連線的話,儲存連線的資源會增多,同時各資源維護難度也隨之加大。故而採用多程序的話(多執行緒間資源是共享的),子程序各自獨享資源,每個連線對應一個子程序,這樣程序之間的資源是自然隔離的,這就省去了管理的代價。

2. UDP+多執行緒,在UDP程式中,服務端採用多程序還是多執行緒都可。因為UDP面向非連線,就省去了管理每個連線的成本,這樣的話採用多執行緒即可。但實際情況需要根據特性而定。

本文完結。關於多程序與多執行緒的區別,將在別文發表。