Linux網路程式設計 自己動手寫程序池

2021-07-03 18:37:49 字數 1942 閱讀 9529

併發伺服器的實現中,可以通過動態的建立子程序(或子執行緒)來實現。這樣有幾個缺點:

1、動態建立程序(或執行緒)比較耗時間,將導致客戶響應較慢

2、動態建立的子程序或子執行緒通常只用來為乙個客戶服務,這導致系統中產生了很多程序或執行緒,使程序或執行緒之間的切換消耗很多cpu時間

3、動態建立子程序是當前程序的完整映像,當前程序需要謹慎管理其分配的檔案描述符,否則子程序可能複製這些資源,導致系統可用資源急劇下降,進而影響伺服器效能

以上的幾個缺點可以通過程序池來規避,程序池是由伺服器預先建立一組子程序,一般數目在3-10之間,程序池中的所有子程序執行著相同的**,應具有相同的屬性,比如優先順序、pgid等。當有新任務來時,主程序選擇程序池中的乙個子程序來為之服務,相比於動態建立子程序,選擇乙個已經存在子程序顯然來得跟快。

以下是我自己參考網路資料寫的乙個簡單的程序池示例,程序間通訊使用的是管道。

該程式說明:主程序先建立兩個管道,乙個用於向子程序寫資料,另乙個用於子程序向主程序寫資料。然後主程序再建立4個子程序,讓4個子程序來程序處理客戶的連線請求,然後給主程序傳送資訊,同時主程序也給子程序傳送應答資訊。

執行程式後的輸出結果(比如埠設為60000):

在瀏覽器中輸入(192.168.1.2執行該程式的主機)後就可以看到

源**

自己動手寫bootloader

原始出處 作者資訊和本宣告。否則將追究法律責任。為了寫乙個bootloader讓板子跑起來,首先我們要知道bootloader是個什麼東東才行。簡單的說,bootloader就是乙個引導核心啟動的一段小 也就是說當啟動完核心之後,它的使命就已經結束。bootloader生命週期 初始化硬體 設定啟動...

自己動手寫CMS

簡易的cms外掛程式,可供借鑑或者擴充套件 流程 定義內容 分類與組織內容 儲存內容 操作控制內容 定義內容 制定目標 確定需要的內容型別 目標使用者定位 確定目標使用者需要何種技術 分類與組織內容 按內容所屬的邏輯層級關係來劃分 按內容的種類來劃分,比如video text audio等等 儲存內...

自己動手寫linux靜態庫檔案

一 概述 1 庫檔案分為動態庫和靜態庫,在linux下動態庫以.so結尾,靜態庫以.a結尾,但二者都是以lib開頭。2 動態庫與靜態庫的區別在於 如果程式是在編譯時載入庫檔案的,就是使用了靜態庫。如果是在執行時載入目標 就成為動態庫。換句話說,如果是使用靜態庫,則靜態庫 在編譯時就拷貝到了程式的 段...