完成端口(completion port)詳解

完成端口(completion port)詳解

ID:14924138

大小:713.00 KB

頁數(shù):37頁

時(shí)間:2018-07-31

完成端口(completion port)詳解_第1頁
完成端口(completion port)詳解_第2頁
完成端口(completion port)詳解_第3頁
完成端口(completion port)詳解_第4頁
完成端口(completion port)詳解_第5頁
資源描述:

《完成端口(completion port)詳解》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、完成端口(CompletionPort)詳解????????????????????????????????????????????????????????????-----ByPiggyXP(小豬)前言???????本系列里完成端口的代碼在兩年前就已經(jīng)寫好了,但是由于許久沒有寫東西了,不知該如何提筆,所以這篇文檔總是在醞釀之中……醞釀了兩年之后,終于決定開始動筆了,但愿還不算晚…..???????這篇文檔我非常詳細(xì)并且圖文并茂的介紹了關(guān)于網(wǎng)絡(luò)編程模型中完成端口的方方面面的信息,從API的用法到使用的步驟,從完成端口的實(shí)現(xiàn)機(jī)理到實(shí)際使用的注意事項(xiàng)

2、,都有所涉及,并且為了讓朋友們更直觀的體會完成端口的用法,本文附帶了有詳盡注釋的使用MFC編寫的圖形界面的示例代碼。???????我的初衷是希望寫一份互聯(lián)網(wǎng)上能找到的最詳盡的關(guān)于完成端口的教學(xué)文檔,而且讓對Socket編程略有了解的人都能夠看得懂,都能學(xué)會如何來使用完成端口這么優(yōu)異的網(wǎng)絡(luò)編程模型,但是由于本人水平所限,不知道我的初衷是否實(shí)現(xiàn)了,但還是希望各位需要的朋友能夠喜歡。???????由于篇幅原因,本文假設(shè)你已經(jīng)熟悉了利用Socket進(jìn)行TCP/IP編程的基本原理,并且也熟練的掌握了多線程編程技術(shù),太基本的概念我這里就略過不提了,網(wǎng)上的資料

3、應(yīng)該遍地都是。???????本文檔凝聚著筆者心血,如要轉(zhuǎn)載,請指明原作者及出處,謝謝!不過代碼沒有版權(quán),可以隨便散播使用,歡迎改進(jìn),特別是非常歡迎能夠幫助我發(fā)現(xiàn)Bug的朋友,以更好的造福大家。^_^???????本文配套的示例源碼下載地址(在我的下載空間里,已經(jīng)補(bǔ)充上了客戶端的代碼)???????http://piggyxp.download.csdn.net/??????(里面的代碼包括VC++2008/VC++2010編寫的完成端口服務(wù)器端和客戶端的代碼,還包括一個(gè)對服務(wù)器端進(jìn)行壓力測試的客戶端,都是經(jīng)過我精心調(diào)試過,并且?guī)в蟹浅T敱M的代碼注

4、釋的。當(dāng)然,作為教學(xué)代碼,為了能夠使得代碼結(jié)構(gòu)清晰明了,我還是對代碼有所簡化,如果想要用于產(chǎn)品開發(fā),最好還是需要自己再完善一下,另外我的工程是用2010編寫的,附帶的2008工程不知道有沒有問題,但是其中代碼都是一樣的,暫未測試)???????忘了囑咐一下了,文章篇幅很長很長,基本涉及到了與完成端口有關(guān)的方方面面,一次看不完可以分好幾次,中間注意休息,好身體才是咱們程序員最大的本錢!??????對了,還忘了囑咐一下,因?yàn)楸救说乃接邢?,雖然我反復(fù)修正了數(shù)遍,但文章和示例代碼里肯定還有我沒發(fā)現(xiàn)的錯誤和紕漏,希望各位一定要指出來,拍磚、噴我,我都能H

5、old住,但是一定要指出來,我會及時(shí)修正,因?yàn)槲也幌胱屛闹械腻e誤傳遍互聯(lián)網(wǎng),禍害大家。?????OK,Let’sgo!Havefun!?目錄:1.完成端口的優(yōu)點(diǎn)2.完成端口程序的運(yùn)行演示3.完成端口的相關(guān)概念4.完成端口的基本流程5.完成端口的使用詳解6.實(shí)際應(yīng)用中應(yīng)該要注意的地方?一.完成端口的優(yōu)點(diǎn)???????1.我想只要是寫過或者想要寫C/S模式網(wǎng)絡(luò)服務(wù)器端的朋友,都應(yīng)該或多或少的聽過完成端口的大名吧,完成端口會充分利用Windows內(nèi)核來進(jìn)行I/O的調(diào)度,是用于C/S通信模式中性能最好的網(wǎng)絡(luò)通信模型,沒有之一;甚至連和它性能接近的通信模型

6、都沒有。???????2.完成端口和其他網(wǎng)絡(luò)通信方式最大的區(qū)別在哪里呢????????(1)首先,如果使用“同步”的方式來通信的話,這里說的同步的方式就是說所有的操作都在一個(gè)線程內(nèi)順序執(zhí)行完成,這么做缺點(diǎn)是很明顯的:因?yàn)橥降耐ㄐ挪僮鲿枞碜酝粋€(gè)線程的任何其他操作,只有這個(gè)操作完成了之后,后續(xù)的操作才可以完成;一個(gè)最明顯的例子就是咱們在MFC的界面代碼中,直接使用阻塞Socket調(diào)用的代碼,整個(gè)界面都會因此而阻塞住沒有響應(yīng)!所以我們不得不為每一個(gè)通信的Socket都要建立一個(gè)線程,多麻煩?這不坑爹呢么?所以要寫高性能的服務(wù)器程序,要求通信一

7、定要是異步的。???????(2)各位讀者肯定知道,可以使用使用“同步通信(阻塞通信)+多線程”的方式來改善(1)的情況,那么好,想一下,我們好不容易實(shí)現(xiàn)了讓服務(wù)器端在每一個(gè)客戶端連入之后,都要啟動一個(gè)新的Thread和客戶端進(jìn)行通信,有多少個(gè)客戶端,就需要啟動多少個(gè)線程,對吧;但是由于這些線程都是處于運(yùn)行狀態(tài),所以系統(tǒng)不得不在所有可運(yùn)行的線程之間進(jìn)行上下文的切換,我們自己是沒啥感覺,但是CPU卻痛苦不堪了,因?yàn)榫€程切換是相當(dāng)浪費(fèi)CPU時(shí)間的,如果客戶端的連入線程過多,這就會弄得CPU都忙著去切換線程了,根本沒有多少時(shí)間去執(zhí)行線程體了,所以效率是

8、非常低下的,承認(rèn)坑爹了不????????(3)而微軟提出完成端口模型的初衷,就是為了解決這種"one-thread-per-client

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。