1.模型一:c/s(經典的)
邏輯:伺服器啟動後,首先建立乙個或多個監聽socket,並且呼叫bind函式將其繫結到需要(自定義)的埠,然後呼叫listen函式等待客戶連線
特點:客戶連線是隨機事件,需要某種i/o模型來監聽連線。
例子:伺服器i/o復用技術之一的select系統呼叫
(當監聽接收到連線 ,伺服器用accept來接收,並且分配乙個邏輯單元為它服務,(fork系統產生邏輯單元,邏輯單元處理好一切返回給客戶端,邏輯單元可以是新建立的子程序,子執行緒或其他)))
2.接下來就是宅男熟悉的p2p模型
優勢:就是去掉通訊的中心
特點;就是每台機器在消耗服務的時候也會給別人提供服務
例子:迅雷,雲計算機群
問題:主機相互之間很難發現(發現伺服器來解決這個問題)
但是本質還是cs,只是乙個變相的擴充套件
i/o處理單元--------》邏輯單元---------》網路儲存單元
中間都是由請求佇列(通訊方式,一般是永久的tcp連線)
2.1i/o處理單元:管理客戶連線的模組,等待並且接受新的連線,接受客戶的資料,將伺服器的相應的資料返回客戶端。資料的收發不一定在這裡,也可能在邏輯單元,(取決於事件處理模式)
2.2邏輯單元:分析並且處理資料,然後將結果傳遞給i/o處理單元或者直接傳送給客戶端(對於機器群來說,乙個邏輯單元也許就是一台邏輯伺服器)
2.3.網路儲存:可以是資料庫,快取和檔案,或者一台伺服器(有些是不需要的,如ssh,telnet)
2.4.請求佇列:各個單元之間通訊方式的抽象
兩個方面:i/o處理單元通知邏輯單元的方式,邏輯單元訪問儲存單元的機制
這裡就會涉及到池的概念,這個tcp理解一般是事先建立好的永久高效的tcp連線
3.i/o模型
3.1阻塞和非阻塞可以用於所有的檔案描述符,不僅僅是socket,
3.2阻塞是可能是無法立即完成而被作業系統掛起,知道等待完成事件發生。
3.3非阻塞是系統的呼叫總是立即返回。,所以如果完成世家沒有發生,就會返回和錯誤一樣的標記。(errno可以區分)
要求:我們需要在完成世家發生的情況下,操作非阻塞,才能實現高效率。
例子:i/o復用(最常用的通知機制,還有sigio訊號)
含義:有個函式叫i/o復用函式,他可以向核心註冊一組事件,核心可以將已經完成的事件通知給應用程式。
例子:i/o復用函式:select,poll,epoll_wait
原理:本身每個函式都是阻塞的,但是他們都具有監聽多個i/o事件 的能力
備註:sigio的訊號處理以後再說
備註2:上述的阻塞i/o,i/o復用和訊號驅動i/o都是同步i/o模型。
原理:i/o讀寫操作都是在i/o事件發生之後
非同步i/o:(posix規範)使用者可以直接對i/o進行讀寫操作,這些操作會告訴使用者讀寫緩衝區的位置,以及操作完成後核心通知應用程式的方式
二者核心區別:同步是使用者自己處理i/o操作,非同步i.o是核心執行i/o操作。
區別2:同步向應用程式通知二是i/o就緒事件,非同步是i/o完成事件。
linux下,aio.h 提供了對非同步i/o的支援
《Linux高效能伺服器程式設計》 讀書筆記
資料鏈路層可以看成是乙個網絡卡驅動,為上層提供了乙個統一的介面。telnet協議是一種遠端登入協議,它使得我們能在本地完成遠端任務。產生復位報文段的三種情況 訪問不存在的埠 異常終止連線 處理半開啟連線 tcp互動資料流 telnet,ssh 和成塊資料流 ftp tcp利用緊急指標標誌和緊急指標來...
高效能web伺服器 讀書筆記
高效能web伺服器 讀書筆記 程序 cpu能夠處理多個請求,在於作業系統通過多執行流體系設計使得多個任務可以輪流使用資源.多執行流的一般實現是程序,多程序的好處首先在於cpu時間的輪流使用,另外對於cpu計算和i o 磁碟和網路i o 操作進行了重疊 大多數程序的時間消耗在i o操作上.dma技術可...
Linux伺服器高效能程式設計 讀書筆記 二
第六章 高階i o函式 6.3 當讀寫分散的記憶體塊時,簡單的將他們拼接在一塊更大的記憶體上傳送或一開始將他們存在同一塊記憶體中都不是較好的解決方案,使用writev和readv可以讀寫分散的多塊記憶體資料。引數二是乙個指向陣列的指標,其單位struct iovc是用來乙個記憶體塊的結構體,這樣只需...