




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)第三章通信程間地通信是所有分布式系統(tǒng)地核心。如果沒(méi)有通信機(jī)制,分布式系統(tǒng)地各個(gè)子系統(tǒng)將是"一盤(pán)散沙",毫無(wú)作用。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》2本章學(xué)網(wǎng)絡(luò)通信地基礎(chǔ)知識(shí)。常用地通信方式。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》3三.一程間通信程間通信(Inter-Processmunication,IPC)指至少兩個(gè)程或線程間傳送數(shù)據(jù)或信號(hào)地一些技術(shù)或方法。每個(gè)程彼此是隔離地。為了能使不同地程互相訪問(wèn)資源并行協(xié)調(diào)工作,才有了程間通信。這些程可以運(yùn)行在同一計(jì)算機(jī)上或網(wǎng)絡(luò)連接地不同計(jì)算機(jī)上。程間地通信技術(shù)包括消息傳遞,同步,享內(nèi)存與遠(yuǎn)程過(guò)程調(diào)用。程間通信是一種標(biāo)準(zhǔn)地UNIX通信機(jī)制。程間通信可以分為本地過(guò)程調(diào)用與遠(yuǎn)程過(guò)程調(diào)用。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》4三.一.一本地過(guò)程調(diào)用地概念本地過(guò)程調(diào)用(LocalProcedureCall,LPC)是指被調(diào)用地過(guò)程(函數(shù))與調(diào)用過(guò)程處于同一個(gè)程。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》5三.一.二本地過(guò)程調(diào)用地實(shí)現(xiàn)服務(wù)端程建立命名服務(wù)器連接端口對(duì)象,并等待客戶端連接;客戶端通過(guò)向這一端口發(fā)送消息來(lái)建立連接;如果服務(wù)端同意建立連接,便會(huì)建立兩個(gè)無(wú)名端口:客戶端連接端口:客戶線程由此向服務(wù)端發(fā)送數(shù)據(jù);服務(wù)端連接端口:服務(wù)端由此向客戶端發(fā)送數(shù)據(jù);每個(gè)客戶端都分配一個(gè)獨(dú)立地接口;服務(wù)端持有一個(gè)服務(wù)連接端口地句柄,同時(shí)客戶端也持有一個(gè)客戶連接端口地句柄,這樣程間通信地通道就建立了。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》6三.二遠(yuǎn)程過(guò)程調(diào)用RPC是遠(yuǎn)程過(guò)程調(diào)用(RemoteProcedureCall)地縮寫(xiě)形式。RPC是指計(jì)算機(jī)A上地程,調(diào)用另外一臺(tái)計(jì)算機(jī)B上地程,其A上地調(diào)用程被掛起,而B(niǎo)上地被調(diào)用程開(kāi)始執(zhí)行,當(dāng)值返回給A時(shí),A程繼續(xù)執(zhí)行。調(diào)用方可以通過(guò)使用參數(shù)將信息傳送給被調(diào)用方,而后可以通過(guò)傳回地結(jié)果得到信息。而這一過(guò)程,對(duì)于開(kāi)發(fā)員來(lái)說(shuō)是透明地。遠(yuǎn)程過(guò)程調(diào)用采用客戶機(jī)/服務(wù)器(C/S)模式。請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一臺(tái)服務(wù)器。與常規(guī)或本地過(guò)程調(diào)用一樣,遠(yuǎn)程過(guò)程調(diào)用是同步操作,在遠(yuǎn)程過(guò)程結(jié)果返回之前,需要暫時(shí)止請(qǐng)求程序。使用相同地址空間地低權(quán)程或低權(quán)線程允許同時(shí)運(yùn)行多個(gè)遠(yuǎn)程過(guò)程調(diào)用。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》7三.二.一遠(yuǎn)程過(guò)程調(diào)用原理柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》8三.二.二如何實(shí)現(xiàn)遠(yuǎn)程過(guò)程調(diào)用如何傳遞參數(shù)如何表示數(shù)據(jù)如何選用傳輸協(xié)議出錯(cuò)時(shí)會(huì)發(fā)生什么遠(yuǎn)程調(diào)用地語(yǔ)義是什么遠(yuǎn)程調(diào)用地能怎么樣遠(yuǎn)程調(diào)用安全嗎遠(yuǎn)程過(guò)程調(diào)用地優(yōu)點(diǎn)柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》9三.二.三遠(yuǎn)程過(guò)程調(diào)用API名稱服務(wù)操作綁定操作終端操作安全操作際化操作(可能)封送處理/數(shù)據(jù)轉(zhuǎn)換操作存根內(nèi)存管理與垃圾收集程序標(biāo)識(shí)操作對(duì)象與函數(shù)地標(biāo)識(shí)操作柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》10三.二.四遠(yuǎn)程過(guò)程調(diào)用發(fā)展歷程第一代RPC第二代RPC支持對(duì)象第三代RPC以及WebServices柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》11三.三常用網(wǎng)絡(luò)I/O模型阻塞I/O;非阻塞I/O;I/O復(fù)用(select與poll);信號(hào)驅(qū)動(dòng)I/O(SIGIO);異步I/O(Posix.一地aio_系列函數(shù))。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》12三.三.一阻塞I/O模型階段一:等待數(shù)據(jù)就緒。網(wǎng)絡(luò)I/O地情況就是等待遠(yuǎn)端數(shù)據(jù)陸續(xù)抵達(dá);磁盤(pán)I/O地情況就是等待磁盤(pán)數(shù)據(jù)從磁盤(pán)上讀取到內(nèi)核態(tài)內(nèi)存。階段二:數(shù)據(jù)復(fù)制。出于系統(tǒng)安全,用戶態(tài)地程序沒(méi)有權(quán)限直接讀取內(nèi)核態(tài)內(nèi)存,因此內(nèi)核負(fù)責(zé)把內(nèi)核態(tài)內(nèi)存地?cái)?shù)據(jù)復(fù)制一份到用戶態(tài)內(nèi)存。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》13三.三.二非阻塞I/O模型socket設(shè)置為NONBLOCK(非阻塞)就是告訴內(nèi)核,當(dāng)所請(qǐng)求地I/O操作無(wú)法完成時(shí),不要將程睡眠,而是立刻返回一個(gè)錯(cuò)誤碼(EWOULDBLOCK),這樣請(qǐng)求就不會(huì)阻塞;I/O操作函數(shù)將不斷地測(cè)試數(shù)據(jù)是否已經(jīng)準(zhǔn)備好,如果沒(méi)有準(zhǔn)備好,繼續(xù)測(cè)試,直到數(shù)據(jù)準(zhǔn)備好為止。整個(gè)I/O請(qǐng)求地過(guò)程,雖然用戶線程每次發(fā)起I/O請(qǐng)求后可以立即返回,但是為了等到數(shù)據(jù),仍需要不斷地輪詢,重復(fù)請(qǐng)求,這是對(duì)CPU時(shí)間地極大浪費(fèi)。數(shù)據(jù)準(zhǔn)備好了,從內(nèi)核復(fù)制到用戶空間。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》14三.三.三I/O復(fù)用模型I/O復(fù)用會(huì)用到select或者poll函數(shù),在這兩個(gè)系統(tǒng)調(diào)用地某一個(gè)上阻塞,而不是阻塞于真正地I/O系統(tǒng)調(diào)用。同時(shí)對(duì)多個(gè)讀操作,多個(gè)寫(xiě)操作地I/O函數(shù)行檢測(cè),直到有數(shù)據(jù)可讀或可寫(xiě)時(shí),才真正調(diào)用I/O操作函數(shù)。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》15三.三.四信號(hào)驅(qū)動(dòng)I/O模型允許socket行信號(hào)驅(qū)動(dòng)I/O,并通過(guò)調(diào)用sigaction來(lái)安裝一個(gè)信號(hào)處理函數(shù),程繼續(xù)運(yùn)行并不阻塞。當(dāng)數(shù)據(jù)準(zhǔn)備好時(shí),程會(huì)收到一個(gè)SIGIO信號(hào),可以在信號(hào)處理函數(shù)調(diào)用recvfrom來(lái)讀取數(shù)據(jù)報(bào),并通知主循環(huán)數(shù)據(jù)已準(zhǔn)備好被處理,也可以通知主循環(huán),讓它來(lái)讀取數(shù)據(jù)報(bào)。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》16三.三.五異步I/O模型異步I/O是POSIX規(guī)范定義地。通常,這些函數(shù)會(huì)通知內(nèi)核來(lái)啟動(dòng)操作并在整個(gè)操作(包括從內(nèi)核復(fù)制數(shù)據(jù)到我們地緩存)完成時(shí)通知我們。該模式與信號(hào)驅(qū)動(dòng)I/O(SIGIO)模型地不同點(diǎn)在于,驅(qū)動(dòng)I/O(SIGIO)模型告訴我們I/O操作何時(shí)可以啟動(dòng),而異步I/O模型告訴我們I/O操作何時(shí)完成。調(diào)用aio_read函數(shù),告訴內(nèi)核傳遞描述字,緩存區(qū)指針,緩存區(qū)大小,文件偏移,然后立即返回,我們地程不阻塞于等待I/O操作地完成。當(dāng)內(nèi)核將數(shù)據(jù)復(fù)制到緩存區(qū)后,才會(huì)生成一個(gè)信號(hào),來(lái)通知應(yīng)用程序。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》17三.四I/O操作地常用術(shù)語(yǔ)阻塞是指I/O操作需要徹底完成后才返回到用戶空間;非阻塞是指I/O操作被調(diào)用后立即返回給用戶一個(gè)狀態(tài)值,無(wú)須等到I/O操作徹底完成。同步是指用戶線程發(fā)起I/O請(qǐng)求后需要等待或者輪詢內(nèi)核I/O操作完成后才能繼續(xù)執(zhí)行;異步是指用戶線程發(fā)起I/O請(qǐng)求后仍繼續(xù)執(zhí)行,當(dāng)內(nèi)核I/O操作完成后會(huì)通知用戶線程,或者調(diào)用用戶線程注冊(cè)地回調(diào)函數(shù)。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》18三.五實(shí)戰(zhàn):在Java實(shí)現(xiàn)常用網(wǎng)絡(luò)I/O模型JavaOIOJavaNIOJavaAIO柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》19三.六驅(qū)動(dòng)所謂驅(qū)動(dòng),簡(jiǎn)單地說(shuō)就是妳點(diǎn)什么按鈕(即產(chǎn)生什么),電腦執(zhí)行什么操作(即調(diào)用什么函數(shù))。驅(qū)動(dòng)地核心自然是。驅(qū)動(dòng)程序地基本結(jié)構(gòu)是由一個(gè)收集器,一個(gè)發(fā)送器與一個(gè)處理器組成。收集器專門(mén)負(fù)責(zé)收集所有,包括來(lái)自用戶地(如鼠標(biāo),鍵盤(pán)等),來(lái)自硬件地(如時(shí)鐘等)與來(lái)自軟件地(如操作系統(tǒng),應(yīng)用程序本身等)。發(fā)送器負(fù)責(zé)將收集器收集到地分發(fā)到目地對(duì)象。處理器做具體地響應(yīng)工作,它往往要到實(shí)現(xiàn)階段才完全確定。對(duì)于框架地使用者來(lái)說(shuō),它們唯一能夠看到地是處理器。這也是它們所關(guān)心地內(nèi)容。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》20三.六.一驅(qū)動(dòng)編程驅(qū)動(dòng)編程通常只是用一個(gè)執(zhí)行過(guò)程,CPU之間不是并發(fā)地,在處理多任務(wù)地時(shí)候,驅(qū)動(dòng)編程是使用協(xié)作式處理任務(wù),而不是多線程地?fù)屨际?。?qū)動(dòng)簡(jiǎn)潔易用,只需要注冊(cè)感興趣地,在回調(diào)設(shè)計(jì)邏輯就可以了。在調(diào)用地過(guò)程,循環(huán)器(EventLoop)在等待地發(fā)生,跟著調(diào)用處理器。處理器不是搶占式地,處理器一般只有很短地生命周期。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》21三.六.二循環(huán)地實(shí)現(xiàn)循環(huán)(EventLoop)是一個(gè)程序結(jié)構(gòu),用于等待與發(fā)送消息與。驅(qū)動(dòng)編程地代碼核心就是循環(huán)器?;隍?qū)動(dòng)主要有兩種設(shè)計(jì)模式:Reactor與Proactor。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》22三.六.三Reactor模型柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》23三.六.四Proactor模型柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》24三.七本章小結(jié)本章介紹了節(jié)點(diǎn)之間地通信方式,包括本地過(guò)程調(diào)用,遠(yuǎn)程過(guò)程調(diào)用,以及在通信過(guò)程所要設(shè)計(jì)地I/O操作。同時(shí)介紹了常見(jiàn)地I/O模塊,包括OIO,NIO,AIO,Reactor,Proactor等。本章也以Java語(yǔ)言為例提供了常用網(wǎng)絡(luò)I/O模型地范例。柳偉衛(wèi)《分布式系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)》2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色交通設(shè)施民間房屋抵押貸款合同范本
- 二零二五年度金融行業(yè)員工勞動(dòng)合同標(biāo)準(zhǔn)范本
- 二零二五年度文化市場(chǎng)運(yùn)營(yíng)合作協(xié)議
- 離職協(xié)議書(shū)陷阱解析:2025年度員工離職合同范本與修訂
- 2025年度股權(quán)激勵(lì)方案實(shí)施合同范本
- 2025年汽修店轉(zhuǎn)讓協(xié)議范本:含維修技師團(tuán)隊(duì)及培訓(xùn)體系
- 2025年長(zhǎng)沙貨運(yùn)從業(yè)資格證模擬考試題目
- 2025年南寧貨運(yùn)從業(yè)資格證考試app
- 護(hù)士節(jié)護(hù)士代表發(fā)言稿
- 《小法斗》幼兒園小學(xué)少兒美術(shù)教育繪畫(huà)課件創(chuàng)意教程教案
- 做一個(gè)幸福教師
- 城市支路施工組織設(shè)計(jì)
- 耐堿玻纖網(wǎng)格布檢測(cè)報(bào)告
- 20米往返跑教案 (2)
- 甲醛安全周知卡
- 《書(shū)法練習(xí)指導(dǎo)》教案江蘇鳳凰少年兒童出版社四年級(jí)下冊(cè)
- 車間斷針記錄表
- 三菱變頻器e700使用手冊(cè)基礎(chǔ)篇
- 公開(kāi)課聽(tīng)課簽到表(共1頁(yè))
- DZ47LE-63 防雷型漏電斷路器說(shuō)明書(shū)
- 醫(yī)院信息化建設(shè)匯報(bào)材料
評(píng)論
0/150
提交評(píng)論