您好,登錄后才能下訂單哦!
1.模型一:C/S(經典的)
起因:TCP/IP協議是沒有客戶和服務端的區別。但是資源(視頻,新聞,軟件)都是被數據提供者所壟斷
邏輯:服務器啟動后,首先創建一個或多個監聽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的支持
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。