linux高性能服務(wù)器讀書(shū)筆記之服務(wù)器模型
單元邏輯
1.模型一:C/S(經(jīng)典的)起因:TCP/IP協(xié)議是沒(méi)有客戶(hù)和服務(wù)端的區(qū)別。但是資源(視頻,新聞,軟件)都是被數(shù)據(jù)提供者所壟斷邏輯:服務(wù)器啟動(dòng)后,首先創(chuàng)建一個(gè)或多個(gè)監(jiān)聽(tīng)socket,并且調(diào)用bind函數(shù)將其綁定到需要(自定義)的端口,然后調(diào)用listen函數(shù)等待客戶(hù)連接特點(diǎn):客戶(hù)連接是隨機(jī)事件,需要某種I/O模型來(lái)監(jiān)聽(tīng)連接。例子:服務(wù)器I/O復(fù)用技術(shù)之一的select系統(tǒng)調(diào)用(當(dāng)監(jiān)聽(tīng)接收到連接,服務(wù)器用accept來(lái)接收,并且分配一個(gè)邏輯單元為它服務(wù),(fork系統(tǒng)產(chǎn)生邏輯單元,邏輯單元處理好一切返回給客戶(hù)端,邏輯單元可以是新創(chuàng)建的子進(jìn)程,子線(xiàn)程或其他)))
2.接下來(lái)就是宅男熟悉的P2P模型
優(yōu)勢(shì):就是去掉通信的中心
特點(diǎn);就是每臺(tái)機(jī)器在消耗服務(wù)的時(shí)候也會(huì)給別人提供服務(wù)
例子:迅雷,云計(jì)算機(jī)群
問(wèn)題:主機(jī)相互之間很難發(fā)現(xiàn)(發(fā)現(xiàn)服務(wù)器來(lái)解決這個(gè)問(wèn)題)
但是本質(zhì)還是CS,只是一個(gè)變相的擴(kuò)展
I/O處理單元--------》邏輯單元---------》網(wǎng)絡(luò)存儲(chǔ)單元中間都是由請(qǐng)求隊(duì)列(通信方式,一般是永久的tCP連接)
2.1I/O處理單元:管理客戶(hù)連接的模塊,等待并且接受新的連接,接受客戶(hù)的數(shù)據(jù),將服務(wù)器的相應(yīng)的數(shù)據(jù)返回客戶(hù)端。數(shù)據(jù)的收發(fā)不一定在這里,也可能在邏輯單元,(取決于事件處理模式)2.2邏輯單元:分析并且處理數(shù)據(jù),然后將結(jié)果傳遞給I/O處理單元或者直接發(fā)送給客戶(hù)端(對(duì)于機(jī)器群來(lái)說(shuō),一個(gè)邏輯單元也許就是一臺(tái)邏輯服務(wù)器)2.3.網(wǎng)絡(luò)儲(chǔ)存:可以是數(shù)據(jù)庫(kù),緩存和文件,或者一臺(tái)服務(wù)器(有些是不需要的,如ssh,telnet)2.4.請(qǐng)求隊(duì)列:各個(gè)單元之間通訊方式的抽象兩個(gè)方面:I/O處理單元通知邏輯單元的方式,邏輯單元訪(fǎng)問(wèn)存儲(chǔ)單元的機(jī)制這里就會(huì)涉及到池的概念,這個(gè)TCP理解一般是事先建立好的永久高效的TCP連接
3.I/O模型
3.1阻塞和非阻塞可以用于所有的文件描述符,不僅僅是socket,
3.2阻塞是可能是無(wú)法立即完成而被操作系統(tǒng)掛起,知道等待完成事件發(fā)生。
3.3非阻塞是系統(tǒng)的調(diào)用總是立即返回。,所以如果完成世家沒(méi)有發(fā)生,就會(huì)返回和錯(cuò)誤一樣的標(biāo)記。(errno可以區(qū)分)
要求:我們需要在完成世家發(fā)生的情況下,操作非阻塞,才能實(shí)現(xiàn)高效率。
例子:I/O復(fù)用(最常用的通知機(jī)制,還有SIGIO信號(hào))
含義:有個(gè)函數(shù)叫I/O復(fù)用函數(shù),他可以向內(nèi)核注冊(cè)一組事件,內(nèi)核可以將已經(jīng)完成的事件通知給應(yīng)用程序。
例子:I/O復(fù)用函數(shù):select,poll,epoll_wait
原理:本身每個(gè)函數(shù)都是阻塞的,但是他們都具有監(jiān)聽(tīng)多個(gè)I/O事件的能力
備注:SIGIO的信號(hào)處理以后再說(shuō)
備注2:上述的阻塞I/O,I/O復(fù)用和信號(hào)驅(qū)動(dòng)I/O都是同步I/O模型。
原理:I/O讀寫(xiě)操作都是在I/O事件發(fā)生之后
異步I/O:(POSIX規(guī)范)用戶(hù)可以直接對(duì)I/O進(jìn)行讀寫(xiě)操作,這些操作會(huì)告訴用戶(hù)讀寫(xiě)緩沖區(qū)的位置,以及操作完成后內(nèi)核通知應(yīng)用程序的方式
二者核心區(qū)別:同步是用戶(hù)自己處理I/O操作,異步I.O是內(nèi)核執(zhí)行I/O操作。
區(qū)別2:同步向應(yīng)用程序通知二是I/O就緒事件,異步是I/O完成事件。
linux下,aio.h提供了對(duì)異步I/O的支持
Tags:?jiǎn)卧壿?,linux高性能服務(wù)器讀書(shū)筆記之服務(wù)器模型
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信