溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux高性能服務(wù)器讀書筆記之服務(wù)器模型

發(fā)布時(shí)間:2020-06-21 08:31:20 來源:網(wǎng)絡(luò) 閱讀:938 作者:jackdongting 欄目:建站服務(wù)器
1.模型一:C/S(經(jīng)典的)
起因:TCP/IP協(xié)議是沒有客戶和服務(wù)端的區(qū)別。但是資源(視頻,新聞,軟件)都是被數(shù)據(jù)提供者所壟斷
邏輯:服務(wù)器啟動(dòng)后,首先創(chuàng)建一個(gè)或多個(gè)監(jiān)聽socket,并且調(diào)用bind函數(shù)將其綁定到需要(自定義)的端口,然后調(diào)用listen函數(shù)等待客戶連接
特點(diǎn):客戶連接是隨機(jī)事件,需要某種I/O模型來監(jiān)聽連接。
例子:服務(wù)器I/O復(fù)用技術(shù)之一的select系統(tǒng)調(diào)用
(當(dāng)監(jiān)聽接收到連接 ,服務(wù)器用accept來接收,并且分配一個(gè)邏輯單元為它服務(wù),(fork系統(tǒng)產(chǎn)生邏輯單元,邏輯單元處理好一切返回給客戶端,邏輯單元可以是新創(chuàng)建的子進(jìn)程,子線程或其他)))

2.接下來就是宅男熟悉的P2P模型

優(yōu)勢:就是去掉通信的中心
特點(diǎn);就是每臺機(jī)器在消耗服務(wù)的時(shí)候也會給別人提供服務(wù)
例子:迅雷,云計(jì)算機(jī)群
問題:主機(jī)相互之間很難發(fā)現(xiàn)(發(fā)現(xiàn)服務(wù)器來解決這個(gè)問題)
但是本質(zhì)還是CS,只是一個(gè)變相的擴(kuò)展

I/O處理單元--------》邏輯單元---------》網(wǎng)絡(luò)存儲單元 
中間都是由請求隊(duì)列(通信方式,一般是永久的tCP連接)
2.1I/O處理單元:管理客戶連接的模塊,等待并且接受新的連接,接受客戶的數(shù)據(jù),將服務(wù)器的相應(yīng)的數(shù)據(jù)返回客戶端。數(shù)據(jù)的收發(fā)不一定在這里,也可能在邏輯單元,(取決于事件處理模式)

2.2邏輯單元:分析并且處理數(shù)據(jù),然后將結(jié)果傳遞給I/O處理單元或者直接發(fā)送給客戶端(對于機(jī)器群來說,一個(gè)邏輯單元也許就是一臺邏輯服務(wù)器)
2.3.網(wǎng)絡(luò)儲存:可以是數(shù)據(jù)庫,緩存和文件,或者一臺服務(wù)器(有些是不需要的,如ssh,telnet)
2.4.請求隊(duì)列:各個(gè)單元之間通訊方式的抽象
兩個(gè)方面:I/O處理單元通知邏輯單元的方式,邏輯單元訪問存儲單元的機(jī)制
這里就會涉及到池的概念,這個(gè)TCP理解一般是事先建立好的永久高效的TCP連接

3.I/O模型
3.1阻塞和非阻塞可以用于所有的文件描述符,不僅僅是socket,
3.2阻塞是可能是無法立即完成而被操作系統(tǒng)掛起,知道等待完成事件發(fā)生。
3.3非阻塞是系統(tǒng)的調(diào)用總是立即返回。,所以如果完成世家沒有發(fā)生,就會返回和錯(cuò)誤一樣的標(biāo)記。(errno可以區(qū)分)
要求:我們需要在完成世家發(fā)生的情況下,操作非阻塞,才能實(shí)現(xiàn)高效率。
例子:I/O復(fù)用(最常用的通知機(jī)制,還有SIGIO信號)
含義:有個(gè)函數(shù)叫I/O復(fù)用函數(shù),他可以向內(nèi)核注冊一組事件,內(nèi)核可以將已經(jīng)完成的事件通知給應(yīng)用程序。
例子:I/O復(fù)用函數(shù):select,poll,epoll_wait
原理:本身每個(gè)函數(shù)都是阻塞的,但是他們都具有監(jiān)聽多個(gè)I/O事件 的能力
備注:SIGIO的信號處理以后再說
備注2:上述的阻塞I/O,I/O復(fù)用和信號驅(qū)動(dòng)I/O都是同步I/O模型。
原理:I/O讀寫操作都是在I/O事件發(fā)生之后
異步I/O:(POSIX規(guī)范)用戶可以直接對I/O進(jìn)行讀寫操作,這些操作會告訴用戶讀寫緩沖區(qū)的位置,以及操作完成后內(nèi)核通知應(yīng)用程序的方式

二者核心區(qū)別:同步是用戶自己處理I/O操作,異步I.O是內(nèi)核執(zhí)行I/O操作。
區(qū)別2:同步向應(yīng)用程序通知二是I/O就緒事件,異步是I/O完成事件。

linux下,aio.h 提供了對異步I/O的支持

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI