模組單個伺服器程式
伺服器機群
i/o處理單元
處理客戶鏈結,讀寫網路資料
作為接入伺服器,實現負載均衡
網路儲存單元
本地資料庫、檔案或快取
資料庫服務
請求佇列
各單元之間的通訊方式
各伺服器之間的永久tcp連線
請求佇列是各單元之間的通訊方式的抽象,通常被實現為池的一部分。對於伺服器機群而言,請求佇列是各台伺服器之間預先建立的、靜態的、永久的tcp連線。這種tcp連線能提高伺服器之間交換資料的效率,因為它避免了動態建立tcp連線導致的額外系統開銷。
針對阻塞i/o執行的系統呼叫可能因為無法立即完成而被作業系統掛起,直到等待事件發生為止。針對非阻塞i/o執行的系統呼叫總是立即返回,而不管事件是否已經發生。如果沒有發生系統返回-1。此時我們需要通過errno來區分這兩種情況。
我們只有在事件已經發生的情況下操作非阻塞i/o,才能提高程式效率。因此非阻塞i/o通常要和其他i/o通知機制一起使用。
對非同步i/o而言,使用者可以直接對i/o執行讀寫操作,這些操作告訴核心使用者讀寫緩衝區的位置,以及i/o操作完成後核心通知應用程式的方式。非同步i/o的讀寫操作總是立即返回,而不論i/o是否阻塞的,因為真正的讀寫操作已經由核心接管。也就是說同步i/o模型要求使用者**自動執行i/o操作(將資料從核心緩衝區讀入使用者緩衝區,或將資料從使用者緩衝區寫入核心緩衝區),而非同步i/o機制則由核心來執行i/o操作(資料在核心緩衝區和使用者緩衝區之間的移動是由核心在」後台」完成的。i/o模型
讀寫操作和阻塞階段
阻塞i/o
程式阻塞於讀寫函式
i/o復用
程式阻塞於i/o復用系統呼叫,但可同時監聽多個i/o事件。對i/o本身的讀寫操作是非阻塞的
sigio訊號
訊號觸發讀寫就緒事件,使用者執行讀寫操作。程式沒有阻塞階段
非同步i/o
核心執行讀寫操作並觸發讀寫完成事件。程式沒有阻塞階段
它要求主線程(i/o處理單元)只負責監聽檔案描述上是否有是事件發生,有的話立即將該事件通知工作執行緒。
與reactor模式不同,proactor模式將所有i/o操作都交給主線程和核心來處理,工作執行緒只負責業務邏輯。
半同步/半非同步模式中的」同步」和」非同步」與之前i/o模型中的」同步」和」非同步」是完全不同的概念。在i/o模型中,」同步」和」非同步」區分的是核心向應用程式通知的是何種i/o事件(就緒事件還是完成事件),以及該由誰來完成i/o讀寫(是應用程式還是核心)。在併發模式中,」同步」指的是程式完全按照**序列的順序執行;」非同步」指的是程式的執行需要由系統事件來驅動。常見的系統事件包括中斷、訊號等。方式優點
缺點同步
邏輯簡單
效率相對低,實時性差
非同步執行效率高,實時性強
編寫相對複雜,難於除錯和擴充套件,不適合大量併發
因此使用半同步/半非同步模式來實現,將結合兩者的優點。其中同步執行緒用於處理客戶邏輯的,非同步執行緒用於處理i/o事件。
變體:半同步/半反應堆模式
選定伺服器語言,構建伺服器框架
1 語言 python 2 python的安裝 我選擇的是 python 3.3.2.msi 3 搭建python的flask框架 1 框架選擇 我們選擇的是python中的flask框架,flask是乙個使用python編寫的輕量級web應用框架。基於werkzeug wsgi工具箱和jinja2...
伺服器程式框架之1 伺服器模型
期末的時候做完開題報告,用了半個寒假投了一篇英文 出去。兩本書籍已經閱讀完畢,現總結高效能伺服器程式框架內容,分四篇文章介紹伺服器模型 i o模型 四種i o模型 兩種高效事件處理模式和兩種高效的併發模式。正文開始 1.c s模型 圖 1 c s模型 c s模型的邏輯很簡單。伺服器期待後,首先建立乙...
伺服器基本配置
伺服器配置網路路由,ip,等 啟動networkmanager systemctl enable networkmanager systemctl start networkmanager 配置刀片ip及閘道器 nmcli connection modify eth0 ipv4.method sta...