Posted on 2008-03-06 01:18
Fox 閱讀(4428)
評(píng)論(7) 編輯 收藏 引用 所屬分類:
G游戲編程
Author: Fox
//-----------------------------------------------------------------------------------------------------
夜深了,隨便寫寫……
//-----------------------------------------------------------------------------------------------------
大凡學(xué)過編程語(yǔ)言和網(wǎng)絡(luò)的TX應(yīng)該都寫過自己的聊天程序,那時(shí)候大家都知道了套接字怎么select、connect、bind、listen、accept、send、recv,也知道了TCP和UDP的區(qū)別……稍微用功的TX或許還寫過多人聊天程序,知道了什么是阻塞I/O,真正致力于向QQ、MSN等即時(shí)聊天工具靠齊的大牛對(duì)本文提到的IOCP更是了然于胸。更多的TX或者有興趣繼續(xù)看下去。
一、阻塞I/O(主要指TCP)
1、當(dāng)socket的recv buff為空時(shí),進(jìn)程會(huì)wait直到新數(shù)據(jù)到達(dá);
2、當(dāng)socket的send buff已滿時(shí),進(jìn)程會(huì)wait直到空間足夠;
3、當(dāng)socket的accept沒有新連接到達(dá),進(jìn)程會(huì)wait直到新連接到達(dá);
4、當(dāng)socket的connect沒有收到ACK,進(jìn)程會(huì)wait直到收到ACK。
而非阻塞I/O則是致力于提供高效的異步I/O。
二、IOCP(I/O Completion Port,I/O完成端口)
IOCP是MS提供的Windows內(nèi)核對(duì)象,內(nèi)部使用線程池管理,并根據(jù)CPU的個(gè)數(shù)確定線程個(gè)數(shù)。當(dāng)數(shù)據(jù)到達(dá)后,統(tǒng)一投遞到唯一的IOCP隊(duì)列,對(duì)應(yīng)的若干工作線程用于處理這些數(shù)據(jù),從而實(shí)現(xiàn)非阻塞異步I/O。
簡(jiǎn)單了解了IOCP的功能和原理,下面提供幾點(diǎn)線索,供有興趣的TX整理思緒J。
1、OVERLAPPED結(jié)構(gòu):
2、CreateIoCompletioPort:用于創(chuàng)建IOCP,關(guān)聯(lián)連接來(lái)的socket句柄,用于接收數(shù)據(jù);
3、GetQueuedCompletionStatus:供工作線程調(diào)用,取到數(shù)據(jù)的線程會(huì)加入I/O完成隊(duì)列,IOCP的線程池管理這些工作線程。
三、深入學(xué)習(xí)和使用
1、Jeffrey Richter的《Advanced Windows》,第15章,誰(shuí)看誰(shuí)知道J;
2、Jim Beveridge & Robert Wiener的《Multithreading Applications in Win32》,第6章,誰(shuí)看誰(shuí)知道J;
3、Google。
//-----------------------------------------------------------------------------------------------------
感覺用Office 2007編輯和發(fā)布Blog比Live Writer要方便很多,主要是Live Writer的編輯功能太少了,如果2007能夠?qū)︽溄舆M(jìn)行target設(shè)置,
再支持EntryName就perfact了J。
從新公司回來(lái),還沒有完全適應(yīng)這邊寬松的環(huán)境,這幾天好似夢(mèng)游一般,先是IE出問題,Ghost了一道,后面是Outlook收郵件出問題。
還是夜深人靜的時(shí)候,一個(gè)人燃著煙、聽著歌、喝著茶、敲著鍵盤有感覺……
//-----------------------------------------------------------------------------------------------------