锘??xml version="1.0" encoding="utf-8" standalone="yes"?>伊人久久成人,国产精品99免视看9,欧美护士18xxxxhdhttp://www.shnenglu.com/singohgod/category/17452.html姣忓ぉ鏅氫笂鍏ョ潯錛岄兘灝嗚繋鏉ュ喘鏂扮殑鏄庡ぉ錛岃繖灝辨槸姊︽兂錛?澶у疂澶╁ぉ瑙?/description>zh-cnMon, 17 Oct 2011 09:24:01 GMTMon, 17 Oct 2011 09:24:01 GMT60[杞澆]Linux闈?rùn)鎬佸簱鍜屽姩鎬佸簱http://www.shnenglu.com/singohgod/archive/2011/10/17/158546.html澶у疂澶╁ぉ瑙?/dc:creator>澶у疂澶╁ぉ瑙?/author>Mon, 17 Oct 2011 07:51:00 GMThttp://www.shnenglu.com/singohgod/archive/2011/10/17/158546.htmlhttp://www.shnenglu.com/singohgod/comments/158546.htmlhttp://www.shnenglu.com/singohgod/archive/2011/10/17/158546.html#Feedback0http://www.shnenglu.com/singohgod/comments/commentRss/158546.htmlhttp://www.shnenglu.com/singohgod/services/trackbacks/158546.html搴撲粠鏈川涓婃潵璇存槸涓縐嶅彲鎵ц浠g爜鐨勪簩榪涘埗鏍煎紡錛屽彲浠ヨ杞藉叆鍐呭瓨涓墽琛屻傚簱鍒嗛潤(rùn)鎬佸簱鍜屽姩鎬佸簱涓ょ銆?nbsp;

闈?rùn)鎬佸簱鍜屽姩鎬佸簱鐨勫尯鍒?/h1>

1. 闈?rùn)鎬佸嚱鏁板簱

    榪欑被搴撶殑鍚嶅瓧涓鑸槸libxxx.a錛涘埄鐢ㄩ潤(rùn)鎬佸嚱鏁板簱緙栬瘧鎴愮殑鏂囦歡姣旇緝澶э紝鍥犱負(fù)鏁翠釜 鍑芥暟搴撶殑鎵鏈夋暟鎹兘浼?xì)琚暣鍚垬q涚洰鏍囦唬鐮佷腑錛屼粬鐨勪紭鐐瑰氨鏄捐屾槗瑙佷簡(jiǎn)錛屽嵆緙栬瘧鍚庣殑鎵ц紼嬪簭涓嶉渶瑕佸閮ㄧ殑鍑芥暟搴撴敮鎸侊紝鍥犱負(fù)鎵鏈変嬌鐢ㄧ殑鍑芥暟閮藉凡緇忚緙栬瘧榪涘幓浜?jiǎn)銆傚綋鐒惰繖涔熶細(xì)鎴愪負(fù)浠栫殑緙虹偣錛屽洜涓哄鏋滈潤(rùn)鎬佸嚱鏁板簱鏀瑰彉浜?jiǎn)锛岄偅涔堜綘鐨劷E嬪簭蹇呴』閲嶆柊緙栬瘧銆?/p>

2. 鍔ㄦ佸嚱鏁板簱

    榪欑被搴撶殑鍚嶅瓧涓鑸槸libxxx.so;鐩稿浜庨潤(rùn)鎬佸嚱鏁板簱錛屽姩鎬佸嚱鏁板簱鍦ㄧ紪璇戠殑鏃跺?騫舵病鏈夎緙栬瘧榪涚洰鏍囦唬鐮佷腑錛屼綘鐨勭▼搴忔墽琛屽埌鐩稿叧鍑芥暟鏃舵墠璋冪敤璇ュ嚱鏁板簱閲岀殑鐩稿簲鍑芥暟錛屽洜姝ゅ姩鎬佸嚱鏁板簱鎵浜х敓鐨勫彲鎵ц鏂囦歡姣旇緝?yōu)畯銆傜敱浜庡嚱鏁板簱娌℃湁琚暣鍚堣繘浣犵殑紼嬪簭錛岃屾槸紼嬪簭榪愯鏃跺姩鎬佺殑鐢寵騫惰皟鐢紝鎵浠ョ▼搴忕殑榪愯鐜涓繀欏繪彁渚涚浉搴旂殑搴撱傚姩鎬佸嚱鏁板簱鐨勬敼鍙樺茍涓嶅獎(jiǎng)鍝嶄綘鐨勭▼搴忥紝鎵浠ュ姩鎬佸嚱鏁板簱鐨勫崌綰ф瘮杈冩柟渚褲?nbsp;
linux緋葷粺鏈夊嚑涓噸瑕佺殑鐩綍瀛樻斁鐩稿簲鐨勫嚱鏁板簱錛屽/lib /usr/lib銆?/p>

闈?rùn)鎬佸簱鐨勪嬌鐢?/h1>

闈?rùn)鎬佸簱鐨勬搷浣滃伐鍏鳳細(xì)gcc鍜宎r 鍛戒護(hù)銆?nbsp;

緙栧啓鍙?qiáng)鋴社敤闈?rùn)鎬佸簱 

(1)璁捐搴撴簮鐮?pr1.c 鍜?pr2.c 

[root@billstone make_lib]# cat pr1.c 

void print1() 

                printf("This is the first lib src!\n"); 

[root@billstone make_lib]# cat pr2.c 

void print2() 

                printf("This is the second src lib!\n"); 

       (2)  緙栬瘧.c 鏂囦歡 

[bill@billstone make_lib]$ cc -O -c pr1.c pr2.c 

[bill@billstone make_lib]$ ls -l pr*.o 

-rw-rw-r--        1 bill          bill                    804    4 鏈?nbsp; 15 11:11 pr1.o 

-rw-rw-r--        1 bill          bill                    804    4 鏈?nbsp; 15 11:11 pr2.o 

(3)  閾炬帴闈?rùn)鎬佸簱 

    涓轟簡(jiǎn)鍦ㄧ紪璇戠▼搴忎腑姝g‘鎵懼埌搴撴枃浠?闈?rùn)鎬佸簱蹇呴』鎸夌収 lib[name].a 鐨勮鍒欏懡鍚?濡備笅渚嬩腑[name]=pr. 

[bill@billstone make_lib]$ ar -rsv libpr.a pr1.o pr2.o 

a - pr1.o 

a - pr2.o 

[bill@billstone make_lib]$ ls -l *.a 

-rw-rw-r--        1 bill          bill                  1822    4 鏈?nbsp; 15 11:12 libpr.a 

[bill@billstone make_lib]$ ar -t libpr.a 

pr1.o 

pr2.o 

(4)  璋冪敤搴撳嚱鏁頒唬鐮?main.c 

[bill@billstone make_lib]$ cat main.c 

int main() 

                print1(); 

                print2(); 

                return 0; 

(5)  緙栬瘧閾炬帴閫夐」 

    -L 鍙?l 鍙傛暟鏀懼湪鍚庨潰.鍏朵腑,-L 鍔犺澆搴撴枃浠惰礬寰?-l 鎸囨槑搴撴枃浠跺悕瀛? 

[bill@billstone make_lib]$ gcc -o main main.c -L./ -lpr 

[bill@billstone make_lib]$ ls -l main* 

-rwxrwxr-x        1 bill          bill                11805    4 鏈?nbsp; 15 11:17 main 

-rw-rw-r--        1 bill          bill                      50    4 鏈?nbsp; 15 11:15 main.c 

(6)鎵ц鐩爣紼嬪簭 

[bill@billstone make_lib]$ ./main 

This is the first lib src! 

This is the second src lib! 

[bill@billstone make_lib]$ 

鍔ㄦ佸簱鐨勪嬌鐢?/h1>

緙栧啓鍔ㄦ佸簱 

(1)璁捐搴撲唬鐮?/strong> 

[bill@billstone make_lib]$ cat pr1.c 

int p = 2; 

void print(){ 

                printf("This is the first dll src!\n"); 

[bill@billstone make_lib]$   

(2)鐢熸垚鍔ㄦ佸簱 

[bill@billstone make_lib]$ gcc -O -fpic -shared -o dl.so pr1.c 

[bill@billstone make_lib]$ ls -l *.so 

-rwxrwxr-x        1 bill          bill                  6592    4 鏈?nbsp; 15 15:19 dl.so 

[bill@billstone make_lib]$ 

鍔ㄦ佸簱鐨勯殣寮忚皟鐢?/strong> 

  鍦ㄧ紪璇戣皟鐢ㄥ簱鍑芥暟浠g爜鏃舵寚鏄庡姩鎬佸簱鐨勪綅緗強(qiáng)鍚嶅瓧,  鐪嬩笅闈㈠疄渚?nbsp;

[bill@billstone make_lib]$ cat main.c 

int main() 

                print(); 

                return 0; 

[bill@billstone make_lib]$ gcc -o tdl main.c ./dl.so 

[bill@billstone make_lib]$ ./tdl 

This is the first dll src! 

[bill@billstone make_lib]$ 

褰撳姩鎬佸簱鐨勪綅緗椿鍚嶅瓧鍙戠敓鏀瑰彉鏃?  紼嬪簭灝嗘棤娉曟甯歌繍琛?  鑰屽姩鎬佸簱鍙栦唬闈?rùn)鎬佸簱鐨勫ソ澶勪箣涓鍒欐槸閫氳繃鏇存柊鍔ㄦ佸簱鑰岄殢鏃跺崌綰у簱鐨勫唴瀹? 

鍔ㄦ佸簱鐨勬樉寮忚皟鐢?/strong> 

  鏄懼紡璋冪敤鍔ㄦ佸簱闇瑕佸洓涓嚱鏁扮殑鏀寔,  鍑芥暟 dlopen 鎵撳紑鍔ㄦ佸簱,  鍑芥暟 dlsym 鑾峰彇鍔ㄦ佸簱涓璞″熀鍧,  鍑?/strong>鏁?dlerror 鑾峰彇鏄懼紡鍔ㄦ佸簱鎿嶄綔涓殑閿欒淇℃伅,  鍑芥暟 doclose 鍏抽棴鍔ㄦ佸簱.

[bill@billstone make_lib]$ cat main.c 

#include <dlfcn.h> 

int main() 

                void *pHandle; 

                void (*pFunc)();                                                    //  鎸囧悜鍑芥暟鐨勬寚閽?nbsp;

                int *p; 

                pHandle = dlopen("./d1.so", RTLD_NOW);                  //  鎵撳紑鍔ㄦ佸簱 

                if(!pHandle){ 

                                printf("Can't find d1.so \n"); 

                                exit(1); 

                } 

                pFunc = (void (*)())dlsym(pHandle, "print");                //  鑾峰彇搴撳嚱鏁?print 鐨勫湴鍧 

                if(pFunc) 

                                pFunc(); 

                else 

                                printf("Can't find function print\n"); 

                p = (int *)dlsym(pHandle, "p");                                      //  鑾峰彇搴撳彉閲?p 鐨勫湴鍧 

                if(p) 

                                printf("p = %d\n", *p); 

                else 

                                printf("Can't find int p\n"); 

                dlclose(pHandle);                                                                //  鍏抽棴鍔ㄦ佸簱 

                return 0; 

[bill@billstone make_lib]$ gcc -o tds main.c –ld1 –L.

姝ゆ椂榪樹笉鑳界珛鍗?/tds錛屽洜涓哄湪鍔ㄦ佸嚱鏁板簱浣跨敤鏃訛紝浼?xì)鏌ユ?usr/lib銆?lib鐩綍涓嬬殑鍔ㄦ佸嚱鏁板簱錛岃屾鏃舵垜浠敓鎴愮殑搴撲笉鍦ㄩ噷杈廣?榪欎釜鏃跺欐湁濂藉嚑縐嶆柟娉曞彲浠ヨ浠栨垚鍔熻繍琛岋細(xì) 鏈鐩存帴鏈綆鍗曠殑鏂規(guī)硶灝辨槸鎶妉ibstr_out.so鎷夊埌/usr/lib鎴?lib涓幓銆?榪樻湁涓縐嶆柟娉?export LD_LIBRARY_PATH=$(pwd) 鍙﹀榪樺彲浠ュ湪/etc/ld.so.conf鏂囦歡閲屽姞鍏ユ垜浠敓鎴愮殑搴撶殑鐩綍錛岀劧鍚?sbin/ldconfig銆?/etc/ld.so.conf鏄潪甯擱噸瑕佺殑涓涓洰褰曪紝閲岄潰瀛樻斁鐨勬槸閾炬帴鍣ㄥ拰鍔犺澆鍣ㄦ悳绱㈠叡浜簱鏃惰媯(gè)鏌ョ殑鐩綍錛岄粯璁ゆ槸浠?usr/lib /lib涓鍙栫殑錛屾墍浠ユ兂瑕侀『鍒╄繍琛岋紝鎴戜滑涔熷彲浠ユ妸鎴戜滑搴撶殑鐩綍鍔犲叆鍒拌繖涓枃浠朵腑騫舵墽琛?sbin/ldconfig 銆傚彟澶栬繕鏈変釜鏂囦歡闇瑕佷簡(jiǎn)瑙?etc/ld.so.cache,閲岄潰淇濆瓨浜?jiǎn)甯哥敤鐨勫姩鎬佸嚱鏁板簱錛屼笖浼?xì)鍏堟妸浠栦滑鍔犺浇鍒板唴瀛樹腑锛屽洜湄?fù)鍐呭瓨鐨勮闂熷害榪滆繙澶т簬紜洏鐨勮闂熷害錛岃繖鏍峰彲浠ユ彁楂樿蔣浠跺姞杞藉姩鎬佸嚱鏁板簱鐨勯熷害浜?jiǎn)銆?/p>

搴撲緷璧栫殑鏌ョ湅

浣跨敤ldd鍛戒護(hù)鏉ユ煡鐪嬫墽琛屾枃浠朵緷璧栦簬鍝簺搴撱?/p>

璇ュ懡浠ょ敤浜庡垽鏂煇涓彲鎵ц鐨?binary 妗f鍚湁浠涔堝姩鎬佸嚱寮忓簱銆?br /> [root@test root]# ldd [-vdr] [filename]
鍙傛暟璇存槑錛?br /> --version銆銆鎵撳嵃l(fā)dd鐨勭増鏈彿
-v --verbose銆銆鎵撳嵃鎵鏈変俊鎭紝渚嬪鍖呮嫭絎﹀彿鐨勭増鏈俊鎭?br /> -d --data-relocs銆銆鎵ц絎﹀彿閲嶉儴緗詫紝騫舵姤鍛婄己灝戠殑鐩爣瀵硅薄錛堝彧瀵笶LF鏍煎紡閫傜敤錛?br /> -r --function-relocs銆銆瀵圭洰鏍囧璞″拰鍑芥暟鎵ц閲嶆柊閮ㄧ講錛屽茍鎶ュ憡緙哄皯鐨勭洰鏍囧璞″拰鍑芥暟錛堝彧瀵笶LF鏍煎紡閫傜敤錛?br /> --help 鐢ㄦ硶淇℃伅銆?/p>

濡傛灉鍛戒護(hù)琛屼腑緇欏畾鐨勫簱鍚嶅瓧鍖呭惈'/'錛岃繖涓▼搴忕殑libc5鐗堟湰灝嗕嬌鐢ㄥ畠浣滀負(fù)搴撳悕瀛楋紱鍚﹀垯瀹冨皢鍦ㄦ爣鍑嗕綅緗悳绱㈠簱銆傝繍琛屼竴涓綋鍓嶇洰褰曚笅鐨勫叡浜簱錛屽姞鍓嶇紑"./"銆?/p> @import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

]]>[杞澆]Windows瀹屾垚绔彛涓嶭inux epoll鎶鏈畝浠?/title><link>http://www.shnenglu.com/singohgod/archive/2011/08/03/152376.html</link><dc:creator>澶у疂澶╁ぉ瑙?/dc:creator><author>澶у疂澶╁ぉ瑙?/author><pubDate>Wed, 03 Aug 2011 09:43:00 GMT</pubDate><guid>http://www.shnenglu.com/singohgod/archive/2011/08/03/152376.html</guid><wfw:comment>http://www.shnenglu.com/singohgod/comments/152376.html</wfw:comment><comments>http://www.shnenglu.com/singohgod/archive/2011/08/03/152376.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/singohgod/comments/commentRss/152376.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/singohgod/services/trackbacks/152376.html</trackback:ping><description><![CDATA[<p><strong>WINDOWS<strong>瀹屾垚绔彛</strong>緙栫▼<br /> </strong>1銆佸熀鏈蹇?br /> 2銆乄INDOWS<strong>瀹屾垚绔彛</strong>鐨勭壒鐐?br /> 3銆?strong>瀹屾垚绔彛</strong>錛圕ompletion Ports 錛夌浉鍏蟲暟鎹粨鏋勫拰鍒涘緩<br /> 4銆?strong>瀹屾垚绔彛</strong>綰跨▼鐨勫伐浣滃師鐞?br /> 5銆乄indows<strong>瀹屾垚绔彛</strong>鐨勫疄渚嬩唬鐮?br /> <strong>Linux鐨?strong>EPoll</strong>妯″瀷<br /> </strong>1銆佷負(fù)浠涔坰elect钀藉悗<br /> 2銆佸唴鏍鎬腑鎻愰珮I(yè)/O鎬ц兘鐨勬柊鏂規(guī)硶<strong>epoll</strong><br /> 3銆?strong>epoll</strong>鐨勪紭鐐?br /> 4銆?strong>epoll</strong>鐨勫伐浣滄ā寮?nbsp;<br /> 5銆?strong>epoll</strong>鐨勪嬌鐢ㄦ柟娉?br /> 6銆丩inux涓?strong>EPOll</strong>緙栫▼瀹炰緥<br /> <strong>鎬葷粨</strong></p> <p><strong>WINDOWS<strong>瀹屾垚绔彛</strong>緙栫▼<br /> </strong>        鎽樿錛氬紑鍙戠綉緇滅▼搴忎粠鏉ラ兘涓嶆槸涓浠跺鏄撶殑浜嬫儏錛屽敖綆″彧闇瑕侀伒瀹堝緢灝戠殑涓浜涜鍒?鍒涘緩socket,鍙戣搗榪炴帴錛屾帴鍙楄繛鎺ワ紝鍙戦佸拰鎺ュ彈鏁版嵁銆傜湡姝g殑鍥伴毦鍦ㄤ簬錛氳浣犵殑紼嬪簭鍙互閫傚簲浠庡崟鍗曚竴涓繛鎺ュ埌鍑犲崈涓繛鎺ヤ箖鑷充簬涓婁竾涓繛鎺ャ傚埄鐢╓indows騫沖彴<strong>瀹屾垚绔彛</strong>榪涜閲嶅彔I(yíng)/O鐨勬妧鏈拰Linux鍦?.6鐗堟湰鐨勫唴鏍鎬腑寮曞叆鐨?strong>EPOll</strong>鎶鏈紝鍙互寰堟柟渚垮湪鍦ㄥ湪Windows鍜孡inux騫沖彴涓婂紑鍙戝嚭鏀寔澶ч噺榪炴帴鐨勭綉緇滄湇鍔$▼搴忋傛湰鏂囦粙緇嶅湪Windows鍜孡inux騫沖彴涓婁嬌鐢ㄧ殑<strong>瀹屾垚绔彛</strong>鍜?strong>EPoll</strong>妯″瀷寮鍙戠殑鍩烘湰鍘熺悊錛屽悓鏃剁粰鍑哄疄闄呯殑渚嬪瓙銆傛湰鏂囦富瑕佸叧娉–/S緇撴瀯鐨勬湇鍔″櫒绔▼搴忥紝鍥犱負(fù)涓鑸潵璇達(dá)紝寮鍙戜竴涓ぇ瀹歸噺錛屽叿鍙墿灞曟х殑winsock紼嬪簭涓鑸氨鏄寚鏈嶅姟紼嬪簭銆?br /> <strong><br /> 1銆佸熀鏈蹇?br /> </strong>    璁懼---windows鎿嶄綔緋葷粺涓婂厑璁?dāng)R氫俊鐨勪換浣曚笢瑗匡紝姣斿鏂囦歡銆佺洰褰曘佷覆琛屽彛銆佸茍琛屽彛銆侀偖浠舵Ы銆佸懡鍚嶇閬撱佹棤鍚嶇閬撱佸鎺ュ瓧銆佹帶鍒跺彴銆侀昏緫紓佺洏銆佺墿鐞嗙鐩樼瓑銆傜粷澶у鏁頒笌璁懼鎵撲氦閬撶殑鍑芥暟閮芥槸CreateFile/ReadFile/WriteFile絳夈傛墍浠ユ垜浠笉鑳界湅鍒?*File鍑芥暟灝卞彧鎯沖埌鏂囦歡璁懼銆備笌璁懼閫氫俊鏈変袱縐嶆柟寮忥紝鍚屾鏂瑰紡鍜屽紓姝ユ柟寮忋傚悓姝ユ柟寮忎笅錛屽綋璋冪敤ReadFile鍑芥暟鏃訛紝鍑芥暟浼?xì)绛夊緟绯痪l熸墽琛屽畬鎵瑕佹眰鐨勫伐浣滐紝鐒跺悗鎵嶈繑鍥烇紱寮傛鏂瑰紡涓嬶紝ReadFile榪欑被鍑芥暟浼?xì)鐩存帴杩斿洖锛尵p葷粺鑷繁鍘誨畬鎴愬璁懼鐨勬搷浣滐紝鐒跺悗浠ユ煇縐嶆柟寮忛氱煡瀹屾垚鎿嶄綔銆?br /> 閲嶅彔I(yíng)/O----欏懼悕鎬濅箟錛屽綋浣犺皟鐢ㄤ簡(jiǎn)鏌愪釜鍑芥暟錛堟瘮濡俁eadFile錛夊氨绔嬪埢榪斿洖鍋氳嚜宸辯殑鍏朵粬鍔ㄤ綔鐨勬椂鍊欙紝鍚屾椂緋葷粺涔熷湪瀵笽/0璁懼榪涜浣犺姹傜殑鎿嶄綔錛屽湪榪欐鏃墮棿鍐呬綘鐨勭▼搴忓拰緋葷粺鐨勫唴閮ㄥ姩浣滄槸閲嶅彔鐨勶紝鍥犳鏈夋洿濂界殑鎬ц兘銆傛墍浠ワ紝閲嶅彔I(yíng)/O鏄敤浜庡紓姝ユ柟寮忎笅浣跨敤I/O璁懼鐨勩?閲嶅彔I(yíng)/O闇瑕佷嬌鐢ㄧ殑涓涓潪甯擱噸瑕佺殑鏁版嵁緇撴瀯OVERLAPPED銆?br /> <strong><br /> 2銆乄INDOWS<strong>瀹屾垚绔彛</strong>鐨勭壒鐐?br /> </strong>   Win32閲嶅彔I(yíng)/O(Overlapped I/O)鏈哄埗鍏佽鍙戣搗涓涓搷浣滐紝鐒跺悗鍦ㄦ搷浣滃畬鎴愪箣鍚庢帴鍙楀埌淇℃伅銆傚浜庨偅縐嶉渶瑕佸緢闀挎椂闂存墠鑳藉畬鎴愮殑鎿嶄綔鏉ヨ錛岄噸鍙營(yíng)O鏈哄埗灝ゅ叾鏈夌敤錛屽洜涓哄彂璧烽噸鍙犳搷浣滅殑綰跨▼鍦ㄩ噸鍙犺姹傚彂鍑哄悗灝卞彲浠ヨ嚜鐢辯殑鍋氬埆鐨勪簨鎯呬簡(jiǎn)銆傚湪WinNT鍜學(xué)in2000涓婏紝鎻愪緵鐨勭湡姝g殑鍙墿灞曠殑I/O妯″瀷灝辨槸浣跨敤<strong>瀹屾垚绔彛</strong>錛圕ompletion Port錛夌殑閲嶅彔I(yíng)/O.<strong>瀹屾垚绔彛</strong>---鏄竴縐峎INDOWS鍐呮牳瀵硅薄銆?strong>瀹屾垚绔彛</strong>鐢ㄤ簬寮傛鏂瑰紡鐨勯噸鍙營(yíng)/0鎯呭喌涓嬶紝褰撶劧閲嶅彔I(yíng)/O涓嶄竴瀹氶潪浣跨敤<strong>瀹屾垚绔彛</strong>涓嶅彲錛岃繕鏈夎澶囧唴鏍稿璞°佷簨浠跺璞°佸憡璀/0絳夈備絾鏄?strong>瀹屾垚绔彛</strong>鍐呴儴鎻愪緵浜?jiǎn)绾拷E嬫睜鐨勭鐞嗭紝鍙互閬垮厤鍙嶅鍒涘緩綰跨▼鐨勫紑閿錛屽悓鏃跺彲浠ユ牴鎹瓹PU鐨勪釜鏁扮伒媧葷殑鍐沖畾綰跨▼涓暟錛岃屼笖鍙互璁╁噺灝戠嚎紼嬭皟搴︾殑嬈℃暟浠庤屾彁楂樻ц兘鍏跺疄綾諱技浜嶹SAAsyncSelect鍜宻elect鍑芥暟鐨勬満鍒舵洿瀹規(guī)槗鍏煎Unix錛屼絾鏄毦浠ュ疄鐜版垜浠兂瑕佺殑“鎵╁睍鎬?#8221;銆傝屼笖windows鐨?strong>瀹屾垚绔彛</strong>鏈哄埗鍦ㄦ搷浣滅郴緇熷唴閮ㄥ凡緇忎綔浜?jiǎn)浼樺寲锛屾彁渚涗簡(jiǎn)鏇撮珮鐨勬晥鐜囥傛墍浠ワ紝鎴戜滑閫夋嫨<strong>瀹屾垚绔彛</strong>寮濮嬫垜浠殑鏈嶅姟鍣ㄧ▼搴忕殑寮鍙戙?br /> 1銆佸彂璧鋒搷浣滀笉涓瀹氬畬鎴愶紝緋葷粺浼?xì)鍦ㄥ畬鎴愮殑鏃跺欓氱煡浣狅紝閫氳繃鐢ㄦ埛鍦?strong>瀹屾垚绔彛</strong>涓婄殑絳夊緟錛屽鐞嗘搷浣滅殑緇撴灉銆傛墍浠ヨ鏈夋鏌?strong>瀹屾垚绔彛</strong>錛屽彇鎿嶄綔緇撴灉鐨勭嚎紼嬨傚湪<strong>瀹屾垚绔彛</strong>涓婂畧鍊欑殑綰跨▼緋葷粺鏈変紭鍖栵紝闄ら潪鍦ㄦ墽琛岀殑綰跨▼闃誨錛屼笉浼?xì)鏈夋柊鐨劸U跨▼琚縺媧伙紝浠ユ鏉ュ噺灝戠嚎紼嬪垏鎹㈤犳垚鐨勬ц兘浠d環(huán)銆傛墍浠ュ鏋滅▼搴忎腑娌℃湁澶鐨勯樆濉炴搷浣滐紝娌℃湁蹇呰鍚姩澶鐨勭嚎紼嬶紝CPU鏁伴噺鐨勪袱鍊嶏紝涓鑸繖鏍鋒潵鍚姩綰跨▼銆?br /> 2銆佹搷浣滀笌鐩稿叧鏁版嵁鐨勭粦瀹氭柟寮忥細(xì)鍦ㄦ彁浜ゆ暟鎹殑鏃跺欑敤鎴峰鏁版嵁鎵撶浉搴旂殑鏍囪錛岃褰曟搷浣滅殑綾誨瀷錛屽湪鐢ㄦ埛澶勭悊鎿嶄綔緇撴灉鐨勬椂鍊欙紝閫氳繃媯(gè)鏌ヨ嚜宸辨墦鐨勬爣璁板拰緋葷粺鐨勬搷浣滅粨鏋滆繘琛岀浉搴旂殑澶勭悊銆?nbsp;<br /> 3銆佹搷浣滆繑鍥炵殑鏂瑰紡:涓鑸搷浣滃畬鎴愬悗瑕侀氱煡紼嬪簭榪涜鍚庣畫澶勭悊銆備絾鍐欐搷浣滃彲浠ヤ笉閫氱煡鐢ㄦ埛錛屾鏃跺鏋滅敤鎴峰啓鎿嶄綔涓嶈兘椹笂瀹屾垚錛屽啓鎿嶄綔鐨勭浉鍏蟲暟鎹細(xì)琚殏瀛樺埌鍒伴潪浜ゆ崲緙撳啿鍖轟腑錛屽湪鎿嶄綔瀹屾垚鐨勬椂鍊欙紝緋葷粺浼?xì)鑷姩閲婃攧〖撳啿鍖恒傛鏃跺彂璧峰畬鍐欐搷浣滐紝浣跨敤鐨勫唴瀛樺氨鍙互閲婃斁浜?jiǎn)銆傛鏃跺鏋滃崰鐢ㄩ潪浜ゆ崲緙撳啿澶浼?xì)鋴删p葷粺鍋滄鍝嶅簲銆?br /> <strong><br /> 3銆?strong>瀹屾垚绔彛</strong>錛圕ompletion Ports 錛夌浉鍏蟲暟鎹粨鏋勫拰鍒涘緩<br /> </strong>    鍏跺疄鍙互鎶?strong>瀹屾垚绔彛</strong>鐪嬫垚緋葷粺緇存姢鐨勪竴涓槦鍒楋紝鎿嶄綔緋葷粺鎶婇噸鍙營(yíng)O鎿嶄綔瀹屾垚鐨勪簨浠墮氱煡鏀懼埌璇ラ槦鍒楅噷錛岀敱浜庢槸鏆撮湶 “鎿嶄綔瀹屾垚”鐨勪簨浠墮氱煡錛屾墍浠ュ懡鍚嶄負(fù)“<strong>瀹屾垚绔彛</strong>”錛圕Ompletion Ports錛夈備竴涓猻ocket琚垱寤哄悗錛屽彲浠ュ湪浠諱綍鏃跺埢鍜屼竴涓?strong>瀹屾垚绔彛</strong>鑱旂郴璧鋒潵銆?br /> <strong>瀹屾垚绔彛</strong>鐩稿叧鏈閲嶈鐨勬槸OVERLAPPED鏁版嵁緇撴瀯<br /> typedef struct _OVERLAPPED { <br />     ULONG_PTR Internal;//琚郴緇熷唴閮ㄨ祴鍊鹼紝鐢ㄦ潵琛ㄧず緋葷粺鐘舵?nbsp;<br />     ULONG_PTR InternalHigh;// 琚郴緇熷唴閮ㄨ祴鍊鹼紝浼犺緭鐨勫瓧鑺傛暟 <br />     union { <br />         struct { <br />             DWORD Offset;//鍜孫ffsetHigh鍚堟垚涓涓?4浣嶇殑鏁存暟錛岀敤鏉ヨ〃紺轟粠鏂囦歡澶撮儴鐨勫灝戝瓧鑺傚紑濮?nbsp;<br />             DWORD OffsetHigh;//鎿嶄綔錛屽鏋滀笉鏄鏂囦歡I/O鏉ユ搷浣滐紝鍒欏繀欏昏瀹氫負(fù)0 <br />         }; <br />         PVOID Pointer; <br />     }; <br />     HANDLE hEvent;//濡傛灉涓嶄嬌鐢紝灝卞姟蹇呰涓?,鍚﹀垯璇瘋祴涓涓湁鏁堢殑Event鍙ユ焺 <br /> } OVERLAPPED, *LPOVERLAPPED; <br /> <br /> 涓嬮潰鏄紓姝ユ柟寮忎嬌鐢≧eadFile鐨勪竴涓緥瀛?nbsp;<br /> OVERLAPPED Overlapped; <br /> Overlapped.Offset=345; <br /> Overlapped.OffsetHigh=0; <br /> Overlapped.hEvent=0; <br /> //鍋囧畾鍏朵粬鍙傛暟閮藉凡緇忚鍒濆鍖?nbsp;<br /> ReadFile(hFile,buffer,sizeof(buffer),&dwNumBytesRead,&Overlapped); <br /> 榪欐牱灝卞畬鎴愪簡(jiǎn)寮傛鏂瑰紡璇繪枃浠剁殑鎿嶄綔錛岀劧鍚嶳eadFile鍑芥暟榪斿洖錛岀敱鎿嶄綔緋葷粺鍋氳嚜宸辯殑浜嬫儏錛屼笅闈粙緇嶅嚑涓笌OVERLAPPED緇撴瀯鐩稿叧鐨勫嚱鏁?nbsp;<br /> 絳夊緟閲嶅彔I(yíng)/0鎿嶄綔瀹屾垚鐨勫嚱鏁?nbsp;<br /> BOOL GetOverlappedResult (<br /> HANDLE hFile,<br /> LPOVERLAPPED lpOverlapped,//鎺ュ彈榪斿洖鐨勯噸鍙營(yíng)/0緇撴瀯<br /> LPDWORD lpcbTransfer,//鎴愬姛浼犺緭浜?jiǎn)澶殲畱瀛楄妭鏁?br /> BOOL fWait //TRUE鍙湁褰撴搷浣滃畬鎴愭墠榪斿洖錛孎ALSE鐩存帴榪斿洖錛屽鏋滄搷浣滄病鏈夊畬鎴愶紝閫氳繃璋?/鐢℅etLastError ( )鍑芥暟浼?xì)杩斿洖ERROR_IO_INCOMPLETE <br /> );<br /> 瀹廐asOverlappedIoCompleted鍙互甯姪鎴戜滑嫻嬭瘯閲嶅彔I(yíng)/0鎿嶄綔鏄惁瀹屾垚錛岃瀹忓OVERLAPPED緇撴瀯鐨処nternal鎴愬憳榪涜浜?jiǎn)娴嬭瘯锛屾煡鐪嬫槸鍚{変簬STATUS_PENDING鍊箋?/p> <p>        涓鑸潵璇達(dá)紝涓涓簲鐢ㄧ▼搴忓彲浠ュ垱寤哄涓伐浣滅嚎紼嬫潵澶勭悊<strong>瀹屾垚绔彛</strong>涓婄殑閫氱煡浜嬩歡銆傚伐浣滅嚎紼嬬殑鏁伴噺渚濊禆浜庣▼搴忕殑鍏蜂綋闇瑕併備絾鏄湪鐞嗘兂鐨勬儏鍐典笅錛屽簲璇ュ搴斾竴涓狢PU鍒涘緩涓涓嚎紼嬨傚洜涓哄湪<strong>瀹屾垚绔彛</strong>鐞嗘兂妯″瀷涓紝姣忎釜綰跨▼閮藉彲浠ヤ粠緋葷粺鑾峰緱涓涓?#8220;鍘熷瓙”鎬х殑鏃墮棿鐗囷紝杞暘榪愯騫舵鏌?strong>瀹屾垚绔彛</strong>錛岀嚎紼嬬殑鍒囨崲鏄澶栫殑寮閿銆傚湪瀹為檯寮鍙戠殑鏃跺欙紝榪樿鑰冭檻榪欎簺綰跨▼鏄惁鐗墊秹鍒板叾浠栧牭濉炴搷浣滅殑鎯呭喌銆傚鏋滄煇綰跨▼榪涜鍫靛鎿嶄綔錛岀郴緇熷垯灝嗗叾鎸傝搗錛岃鍒殑綰跨▼鑾峰緱榪愯鏃墮棿銆傚洜姝わ紝濡傛灉鏈夎繖鏍風(fēng)殑鎯呭喌錛屽彲浠ュ鍒涘緩鍑犱釜綰跨▼鏉ュ敖閲忓埄鐢ㄦ椂闂淬?br /> 搴旂敤<strong>瀹屾垚绔彛</strong>錛?br />     鍒涘緩<strong>瀹屾垚绔彛</strong>錛?strong>瀹屾垚绔彛</strong>鏄竴涓唴鏍稿璞★紝浣跨敤鏃朵粬鎬繪槸瑕佸拰鑷沖皯涓涓湁鏁堢殑璁懼鍙ユ焺榪涜鍏寵仈錛?strong>瀹屾垚绔彛</strong>鏄竴涓鏉傜殑鍐呮牳瀵硅薄錛屽垱寤哄畠鐨勫嚱鏁版槸錛?br /> HANDLE CreateIoCompletionPort( <br />     IN HANDLE FileHandle, <br />     IN HANDLE ExistingCompletionPort, <br />     IN ULONG_PTR CompletionKey, <br />     IN DWORD NumberOfConcurrentThreads <br />     ); <br /> <br /> 閫氬父鍒涘緩宸ヤ綔鍒嗕袱姝ワ細(xì)<br /> 絎竴姝ワ紝鍒涘緩涓涓柊鐨?strong>瀹屾垚绔彛</strong>鍐呮牳瀵硅薄錛屽彲浠ヤ嬌鐢ㄤ笅闈㈢殑鍑芥暟錛?br />        HANDLE CreateNewCompletionPort(DWORD dwNumberOfThreads) <br /> { <br />           return CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,NULL,dwNumberOfThreads); <br /> };<br />        <br /> 絎簩姝ワ紝灝嗗垰鍒涘緩鐨?strong>瀹屾垚绔彛</strong>鍜屼竴涓湁鏁堢殑璁懼鍙ユ焺鍏寵仈璧鋒潵錛屽彲浠ヤ嬌鐢ㄤ笅闈㈢殑鍑芥暟錛?br />        bool AssicoateDeviceWithCompletionPort(HANDLE hCompPort,HANDLE hDevice,DWORD dwCompKey) <br /> { <br />           HANDLE h=CreateIoCompletionPort(hDevice,hCompPort,dwCompKey,0); <br />           return h==hCompPort; <br /> }; <br /> 璇存槑 <br /> 1錛?CreateIoCompletionPort鍑芥暟涔熷彲浠ヤ竴嬈℃х殑鏃㈠垱寤?strong>瀹屾垚绔彛</strong>瀵硅薄錛屽張鍏寵仈鍒頒竴涓湁鏁堢殑璁懼鍙ユ焺 <br /> 2錛?CompletionKey鏄竴涓彲浠ヨ嚜宸卞畾涔夌殑鍙傛暟錛屾垜浠彲浠ユ妸涓涓粨鏋勭殑鍦板潃璧嬬粰瀹冿紝鐒跺悗鍦ㄥ悎閫傜殑鏃跺欏彇鍑烘潵浣跨敤錛屾渶濂借淇濊瘉緇撴瀯閲岄潰鐨勫唴瀛樹笉鏄垎閰嶅湪鏍堜笂錛岄櫎闈炰綘鏈夊崄鍒嗙殑鎶婃彙鍐呭瓨浼?xì)淇濈暀鍒颁綘瑕佷娇鐢ㄧ殑閭d竴鍒匯?br /> 3錛?NumberOfConcurrentThreads閫氬父鐢ㄦ潵鎸囧畾瑕佸厑璁稿悓鏃惰繍琛岀殑鐨勭嚎紼嬬殑鏈澶т釜鏁般傞氬父鎴戜滑鎸囧畾涓?錛岃繖鏍風(fēng)郴緇熶細(xì)鏍規(guī)嵁CPU鐨勪釜鏁版潵鑷姩紜畾銆傚垱寤哄拰鍏寵仈鐨勫姩浣滃畬鎴愬悗錛岀郴緇熶細(xì)灝?strong>瀹屾垚绔彛</strong>鍏寵仈鐨勮澶囧彞鏌勩佸畬鎴愰敭浣滀負(fù)涓鏉$邯褰曞姞鍏ュ埌榪欎釜<strong>瀹屾垚绔彛</strong>鐨勮澶囧垪琛ㄤ腑銆傚鏋滀綘鏈夊涓?strong>瀹屾垚绔彛</strong>錛屽氨浼?xì)鏈夊涓搴旂殑璁惧鍒楄〃銆傚鏋滆澶囧彞鏌勮鍏抽棴錛屽垯琛ㄤ腑鑷姩鍒犻櫎璇ョ邯褰曘?br /> <strong><br /> 4銆?strong>瀹屾垚绔彛</strong>綰跨▼鐨勫伐浣滃師鐞?/strong><br /> <strong>瀹屾垚绔彛</strong>鍙互甯姪鎴戜滑綆$悊綰跨▼姹狅紝浣嗘槸綰跨▼姹犱腑鐨勭嚎紼嬮渶瑕佹垜浠嬌鐢╛beginthreadex鏉ュ垱寤猴紝鍑粈涔堥氱煡<strong>瀹屾垚绔彛</strong>綆$悊鎴戜滑鐨勬柊綰跨▼鍛紵絳旀鍦ㄥ嚱鏁癎etQueuedCompletionStatus銆傝鍑芥暟鍘熷瀷錛?nbsp;<br /> BOOL GetQueuedCompletionStatus( <br />     IN HANDLE CompletionPort, <br />     OUT LPDWORD lpNumberOfBytesTransferred, <br />     OUT PULONG_PTR lpCompletionKey, <br />     OUT LPOVERLAPPED *lpOverlapped, <br />     IN DWORD dwMilliseconds <br /> ); <br /> 榪欎釜鍑芥暟璇曞浘浠庢寚瀹氱殑<strong>瀹屾垚绔彛</strong>鐨処/0瀹屾垚闃熷垪涓娊鍙栫邯褰曘傚彧鏈夊綋閲嶅彔I(yíng)/O鍔ㄤ綔瀹屾垚鐨勬椂鍊欙紝瀹屾垚闃熷垪涓墠鏈夌邯褰曘傚嚒鏄皟鐢ㄨ繖涓嚱鏁扮殑綰跨▼灝嗚鏀懼叆鍒?strong>瀹屾垚绔彛</strong>鐨勭瓑寰呯嚎紼嬮槦鍒椾腑錛屽洜姝?strong>瀹屾垚绔彛</strong>灝卞彲浠ュ湪鑷繁鐨勭嚎紼嬫睜涓府鍔╂垜浠淮鎶よ繖涓嚎紼嬨?strong>瀹屾垚绔彛</strong>鐨処/0瀹屾垚闃熷垪涓瓨鏀句簡(jiǎn)褰撻噸鍙營(yíng)/0瀹屾垚鐨勭粨鏋?--- 涓鏉$邯褰曪紝璇ョ邯褰曟嫢鏈夊洓涓瓧孌碉紝鍓嶄笁欏瑰氨瀵瑰簲GetQueuedCompletionStatus鍑芥暟鐨?銆?銆?鍙傛暟錛屾渶鍚庝竴涓瓧孌墊槸閿欒淇℃伅dwError銆傛垜浠篃鍙互閫氳繃璋冪敤PostQueudCompletionStatus妯℃嫙瀹屾垚浜?jiǎn)涓涓噸鍙營(yíng)/0鎿嶄綔銆?nbsp;<br /> 褰揑/0瀹屾垚闃熷垪涓嚭鐜頒簡(jiǎn)綰綍錛?strong>瀹屾垚绔彛</strong>灝嗕細(xì)媯(gè)鏌ョ瓑寰呯嚎紼嬮槦鍒楋紝璇ラ槦鍒椾腑鐨勭嚎紼嬮兘鏄氳繃璋冪敤GetQueuedCompletionStatus鍑芥暟浣胯嚜宸卞姞鍏ラ槦鍒楃殑銆傜瓑寰呯嚎紼嬮槦鍒楀緢綆鍗曪紝鍙槸淇濆瓨浜?jiǎn)杩欎簺绾拷E嬬殑ID銆?strong>瀹屾垚绔彛</strong>浼?xì)鎸夌収鍚帢q涘厛鍑虹殑鍘熷垯灝嗕竴涓嚎紼嬮槦鍒楃殑ID鏀懼叆鍒伴噴鏀劇嚎紼嬪垪琛ㄤ腑錛屽悓鏃惰綰跨▼灝嗕粠絳夊緟GetQueuedCompletionStatus鍑芥暟榪斿洖鐨勭潯鐪犵姸鎬佷腑鍙樹負(fù)鍙皟搴︾姸鎬佺瓑寰匔PU鐨勮皟搴︺傛墍浠ユ垜浠殑綰跨▼瑕佹兂鎴愪負(fù)<strong>瀹屾垚绔彛</strong>綆$悊鐨勭嚎紼嬶紝灝卞繀欏昏璋冪敤GetQueuedCompletionStatus鍑芥暟銆傚嚭浜庢ц兘鐨勪紭鍖栵紝瀹為檯涓?strong>瀹屾垚绔彛</strong>榪樼淮鎶や簡(jiǎn)涓涓殏鍋滅嚎紼嬪垪琛紝鍏蜂綋緇嗚妭鍙互鍙傝冦奧indows楂樼駭緙栫▼鎸囧崡銆嬶紝鎴戜滑鐜板湪鐭ラ亾鐨勭煡璇嗭紝宸茬粡瓚沖浜?jiǎn)銆?nbsp;<strong>瀹屾垚绔彛</strong>綰跨▼闂存暟鎹紶閫掔嚎紼嬮棿浼犻掓暟鎹渶甯哥敤鐨勫姙娉曟槸鍦╛beginthreadex鍑芥暟涓皢鍙傛暟浼犻掔粰綰跨▼鍑芥暟錛屾垨鑰呬嬌鐢ㄥ叏灞鍙橀噺銆備絾鏄?strong>瀹屾垚绔彛</strong>榪樻湁鑷繁鐨勪紶閫掓暟鎹殑鏂規(guī)硶錛岀瓟妗堝氨鍦ㄤ簬CompletionKey鍜孫VERLAPPED鍙傛暟銆?br /> CompletionKey琚繚瀛樺湪<strong>瀹屾垚绔彛</strong>鐨勮澶囪〃涓紝鏄拰璁懼鍙ユ焺涓涓瀵瑰簲鐨勶紝鎴戜滑鍙互灝嗕笌璁懼鍙ユ焺鐩稿叧鐨勬暟鎹繚瀛樺埌CompletionKey涓紝鎴栬呭皢CompletionKey琛ㄧず涓虹粨鏋勬寚閽堬紝榪欐牱灝卞彲浠ヤ紶閫掓洿鍔犱赴瀵岀殑鍐呭銆傝繖浜涘唴瀹瑰彧鑳藉湪涓寮濮嬪叧鑱?strong>瀹屾垚绔彛</strong>鍜岃澶囧彞鏌勭殑鏃跺欏仛錛屽洜姝や笉鑳藉湪浠ュ悗鍔ㄦ佹敼鍙樸?br /> OVERLAPPED鍙傛暟鏄湪姣忔璋冪敤ReadFile榪欐牱鐨勬敮鎸侀噸鍙營(yíng)/0鐨勫嚱鏁版椂浼犻掔粰<strong>瀹屾垚绔彛</strong>鐨勩傛垜浠彲浠ョ湅鍒幫紝濡傛灉鎴戜滑涓嶆槸瀵規(guī)枃浠惰澶囧仛鎿嶄綔錛岃緇撴瀯鐨勬垚鍛樺彉閲忓氨瀵規(guī)垜浠嚑涔庢鏃犱綔鐢ㄣ傛垜浠渶瑕侀檮鍔犱俊鎭紝鍙互鍒涘緩鑷繁鐨勭粨鏋勶紝鐒跺悗灝哋VERLAPPED緇撴瀯鍙橀噺浣滀負(fù)鎴戜滑緇撴瀯鍙橀噺鐨勭涓涓垚鍛橈紝鐒跺悗浼犻掔涓涓垚鍛樺彉閲忕殑鍦板潃緇橰eadFile鍑芥暟銆傚洜涓虹被鍨嬪尮閰嶏紝褰撶劧鍙互閫氳繃緙栬瘧銆傚綋GetQueuedCompletionStatus鍑芥暟榪斿洖鏃訛紝鎴戜滑鍙互鑾峰彇鍒扮涓涓垚鍛樺彉閲忕殑鍦板潃錛岀劧鍚庝竴涓畝鍗曠殑寮哄埗杞崲錛屾垜浠氨鍙互鎶婂畠褰撲綔瀹屾暣鐨勮嚜瀹氫箟緇撴瀯鐨勬寚閽堜嬌鐢紝榪欐牱灝卞彲浠ヤ紶閫掑緢澶氶檮鍔犵殑鏁版嵁浜?jiǎn)銆傚お濂戒簡(jiǎn)錛佸彧鏈変竴鐐硅娉ㄦ剰錛屽鏋滆法綰跨▼浼犻掞紝璇鋒敞鎰忓皢鏁版嵁鍒嗛厤鍒板爢涓婏紝騫朵笖鎺ユ敹绔簲璇ュ皢鏁版嵁鐢ㄥ畬鍚庨噴鏀俱傛垜浠氬父闇瑕佸皢ReadFile榪欐牱鐨勫紓姝ュ嚱鏁扮殑鎵闇瑕佺殑緙撳啿鍖烘斁鍒版垜浠嚜瀹氫箟鐨勭粨鏋勪腑錛岃繖鏍峰綋GetQueuedCompletionStatus琚繑鍥炴椂錛屾垜浠殑鑷畾涔夌粨鏋勭殑緙撳啿鍖哄彉閲忎腑灝卞瓨鏀句簡(jiǎn)I/0鎿嶄綔鐨勬暟鎹侰ompletionKey鍜孫VERLAPPED鍙傛暟錛岄兘鍙互閫氳繃GetQueuedCompletionStatus鍑芥暟鑾峰緱銆?br /> 綰跨▼鐨勫畨鍏ㄩ鍑?br />        寰堝綰跨▼涓轟簡(jiǎn)涓嶆涓嬈$殑鎵ц寮傛鏁版嵁澶勭悊錛岄渶瑕佷嬌鐢ㄥ涓嬭鍙?br /> while (true)<br /> {<br />        ......<br />        GetQueuedCompletionStatus(...); <br />         ......<br /> }<br /> 閭d箞濡備綍閫鍑哄憿錛岀瓟妗堝氨鍦ㄤ簬涓婇潰鏇炬彁鍒扮殑PostQueudCompletionStatus鍑芥暟錛屾垜浠彲浠ョ敤瀹冨彂閫佷竴涓嚜瀹氫箟鐨勫寘鍚簡(jiǎn)OVERLAPPED鎴愬憳鍙橀噺鐨勭粨鏋勫湴鍧錛岄噷闈㈠寘鍚竴涓姸鎬佸彉閲忥紝褰撶姸鎬佸彉閲忎負(fù)閫鍑烘爣蹇楁椂錛岀嚎紼嬪氨鎵ц娓呴櫎鍔ㄤ綔鐒跺悗閫鍑恒?br /> <strong><br /> 5銆乄indows<strong>瀹屾垚绔彛</strong>鐨勫疄渚嬩唬鐮侊細(xì)<br /> </strong>DWORD WINAPI WorkerThread(LPVOID lpParam)<br /> { <br /> ULONG_PTR *PerHandleKey;<br /> OVERLAPPED *Overlap;<br /> OVERLAPPEDPLUS *OverlapPlus,<br /> *newolp;<br /> DWORD dwBytesXfered;<br /> while (1)<br /> {<br /> ret = GetQueuedCompletionStatus(<br /> hIocp,<br /> &dwBytesXfered,<br /> (PULONG_PTR)&PerHandleKey,<br /> &Overlap,<br /> INFINITE);<br /> if (ret == 0)<br /> {<br /> // Operation failed<br /> continue;<br /> }<br /> OverlapPlus = CONTAINING_RECORD(Overlap, OVERLAPPEDPLUS, ol);<br /> switch (OverlapPlus->OpCode)<br /> {<br /> case OP_ACCEPT:<br /> // Client socket is contained in OverlapPlus.sclient<br /> // Add client to completion port<br /> CreateIoCompletionPort(<br /> (HANDLE)OverlapPlus->sclient,<br /> hIocp,<br /> (ULONG_PTR)0,<br /> 0);<br /> // Need a new OVERLAPPEDPLUS structure<br /> // for the newly accepted socket. Perhaps<br /> // keep a look aside list of free structures.<br /> newolp = AllocateOverlappedPlus();<br /> if (!newolp)<br /> {<br /> // Error<br /> }<br /> newolp->s = OverlapPlus->sclient;<br /> newolp->OpCode = OP_READ;<br /> // This function divpares the data to be sent<br /> PrepareSendBuffer(&newolp->wbuf);<br /> ret = WSASend(<br /> newolp->s,<br /> &newolp->wbuf,<br /> 1,<br /> &newolp->dwBytes,<br /> 0,<br /> &newolp.ol,<br /> NULL);<br /> if (ret == SOCKET_ERROR)<br /> {<br /> if (WSAGetLastError() != WSA_IO_PENDING)<br /> {<br /> // Error<br /> }<br /> }<br /> // Put structure in look aside list for later use<br /> FreeOverlappedPlus(OverlapPlus);<br /> // Signal accept thread to issue another AcceptEx<br /> SetEvent(hAcceptThread);<br /> break;<br /> case OP_READ:<br /> // Process the data read <br /> // Repost the read if necessary, reusing the same<br /> // receive buffer as before<br /> memset(&OverlapPlus->ol, 0, sizeof(OVERLAPPED));<br /> ret = WSARecv(<br /> OverlapPlus->s,<br /> &OverlapPlus->wbuf,<br /> 1,<br /> &OverlapPlus->dwBytes,<br /> &OverlapPlus->dwFlags,<br /> &OverlapPlus->ol,<br /> NULL);<br /> if (ret == SOCKET_ERROR)<br /> {<br /> if (WSAGetLastError() != WSA_IO_PENDING)<br /> {<br /> // Error<br /> }<br /> }<br /> break;<br /> case OP_WRITE:<br /> // Process the data sent, etc.<br /> break;<br /> } // switch<br /> } // while<br /> } // WorkerThread<br /> </p> <p>鏌ョ湅浠ヤ笂浠g爜錛屾敞鎰忓鏋淥verlapped鎿嶄綔绔嬪埢澶辮觸錛堟瘮濡傦紝榪斿洖SOCKET_ERROR鎴栧叾浠栭潪WSA_IO_PENDING鐨勯敊璇級(jí)錛屽垯娌℃湁浠諱綍瀹屾垚閫氱煡鏃墮棿浼?xì)琚攽謭?strong>瀹屾垚绔彛</strong>闃熷垪閲屻傚弽涔嬶紝鍒欎竴瀹氭湁鐩稿簲鐨勯氱煡鏃墮棿琚斁鍒?strong>瀹屾垚绔彛</strong>闃熷垪銆傛洿瀹屽杽鐨勫叧浜嶹insock鐨?strong>瀹屾垚绔彛</strong>鏈哄埗錛屽彲浠ュ弬鑰僊SDN鐨凪icrosoft PlatFormSDK錛岄偅閲屾湁<strong>瀹屾垚绔彛</strong>鐨勪緥瀛愩傝闂?a >http://msdn.microsoft.com/library/techart/msdn_servrapp.htm</a>鍙互鑾峰緱鏇村淇℃伅銆?/p> <p><strong>Linux鐨?strong>EPoll</strong>妯″瀷<br /> </strong>Linux 2.6鍐呮牳涓彁楂樼綉緇淚/O鎬ц兘鐨勬柊鏂規(guī)硶-<strong>epoll</strong> I/O澶氳礬澶嶇敤鎶鏈湪姣旇緝澶氱殑TCP緗戠粶鏈嶅姟鍣ㄤ腑鏈変嬌鐢紝鍗蟲瘮杈冨鐨勭敤鍒皊elect鍑芥暟銆?br /> <br /> <strong>1銆佷負(fù)浠涔坰elect钀藉悗<br /> </strong>棣栧厛錛屽湪Linux鍐呮牳涓紝select鎵鐢ㄥ埌鐨凢D_SET鏄湁闄愮殑錛屽嵆鍐呮牳涓湁涓弬鏁癬_FD_SETSIZE瀹氫箟浜?jiǎn)姣忎釜FD_SET鐨勫彞鏌勪釜鏁幫紝鍦ㄦ垜鐢ㄧ殑2.6.15-25-386鍐呮牳涓紝璇ュ兼槸1024錛屾悳绱㈠唴鏍告簮浠g爜寰楀埌錛?br /> include/linux/posix_types.h:#define __FD_SETSIZE         1024<br /> 涔熷氨鏄錛屽鏋滄兂瑕佸悓鏃舵嫻?025涓彞鏌勭殑鍙鐘舵佹槸涓嶅彲鑳界敤select瀹炵幇鐨勩傛垨鑰呭悓鏃舵嫻?025涓彞鏌勭殑鍙啓鐘舵佷篃鏄笉鍙兘鐨勩傚叾嬈★紝鍐呮牳涓疄鐜皊elect鏄敤杞鏂規(guī)硶錛屽嵆姣忔媯(gè)嫻嬮兘浼?xì)閬嶅巻鎵鏈塅D_SET涓殑鍙ユ焺錛屾樉鐒?dòng)灱宻elect鍑芥暟鎵ц鏃墮棿涓嶧D_SET涓殑鍙ユ焺涓暟鏈変竴涓瘮渚嬪叧緋伙紝鍗硈elect瑕佹嫻嬬殑鍙ユ焺鏁拌秺澶氬氨浼?xì)瓒婅匆?guī)椂銆傚綋鐒?dòng)灱屽湪鍓嶆枃涓垜迤堟病鏈夋彁鍙?qiáng)poll鏂規(guī)硶錛屼簨瀹炰笂鐢╯elect鐨勬湅鍙嬩竴瀹氫篃璇曡繃poll錛屾垜涓漢瑙夊緱select鍜宲oll澶у悓灝忓紓錛屼釜浜哄亸濂戒簬鐢╯elect鑰屽凡銆?/p> <p><strong>2銆佸唴鏍鎬腑鎻愰珮I(yè)/O鎬ц兘鐨勬柊鏂規(guī)硶<strong>epoll</strong></strong><br /> <strong>epoll</strong>鏄粈涔堬紵鎸夌収man鎵嬪唽鐨勮娉曪細(xì)鏄負(fù)澶勭悊澶ф壒閲忓彞鏌勮屼綔浜?jiǎn)鏀箻q涚殑poll銆傝浣跨敤<strong>epoll</strong>鍙渶瑕佽繖涓変釜緋葷粺璋冪敤錛?strong>epoll</strong>_create(2)錛?nbsp;<strong>epoll</strong>_ctl(2)錛?nbsp;<strong>epoll</strong>_wait(2)銆?br /> 褰撶劧錛岃繖涓嶆槸2.6鍐呮牳鎵嶆湁鐨勶紝瀹冩槸鍦?.5.44鍐呮牳涓寮曡繘鐨?<strong>epoll</strong>(4) is a new API introduced in Linux kernel 2.5.44)</p> <p>Linux2.6鍐呮牳<strong>epoll</strong>浠嬬粛<br /> 鍏堜粙緇?鏈功銆奣he Linux Networking Architecture--Design and Implementation of Network Protocols in the Linux Kernel銆嬶紝浠?.4鍐呮牳璁茶ВLinux TCP/IP瀹炵幇錛岀浉褰撲笉閿?浣滀負(fù)涓涓幇瀹炰笘鐣屼腑鐨勫疄鐜幫紝寰堝鏃跺欎綘蹇呴』浣滃緢澶氭潈琛★紝榪欐椂鍊欏弬鑰冧竴涓箙緇忚冮獙鐨勭郴緇熸洿鏈夊疄闄呮剰涔夈備婦涓緥瀛?linux鍐呮牳涓璼k_buff緇撴瀯涓轟簡(jiǎn)榪芥眰閫熷害鍜屽畨鍏紝鐗虹壊浜?jiǎn)閮ㄥ垎鍐呭瓨锛屾墍浠ュ湪鍙戦乀CP鍖呯殑鏃跺欙紝鏃犺搴旂敤灞傛暟鎹澶?sk_buff鏈灝忎篃鏈?72鐨勫瓧鑺?鍏跺疄瀵逛簬socket搴旂敤灞傜▼搴忔潵璇達(dá)紝鍙﹀涓鏈功銆奤NIX Network Programming Volume 1銆嬫剰涔夋洿澶т竴鐐?2003騫寸殑鏃跺欙紝榪欐湰涔﹀嚭浜?jiǎn)鏈鏂扮殑絎?鐗堟湰錛屼笉榪囦富瑕佽繕鏄慨璁㈢2鐗堟湰銆傚叾涓6绔犮奍/O Multiplexing銆嬫槸鏈閲嶈鐨勩係tevens緇欏嚭浜?jiǎn)缃懢l淚O鐨勫熀鏈ā鍨嬨傚湪榪欓噷鏈閲嶈鐨勮帿榪囦簬select妯″瀷鍜孉synchronous I/O妯″瀷.浠庣悊璁轟笂璇達(dá)紝AIO浼間箮鏄渶楂樻晥鐨勶紝浣犵殑IO鎿嶄綔鍙互绔嬪嵆榪斿洖錛岀劧鍚庣瓑寰卭s鍛婅瘔浣營(yíng)O鎿嶄綔瀹屾垚銆備絾鏄竴鐩翠互鏉ワ紝濡備綍瀹炵幇灝辨病鏈変竴涓畬緹庣殑鏂規(guī)銆傛渶钁楀悕鐨剋indows<strong>瀹屾垚绔彛</strong>瀹炵幇鐨凙IO,瀹為檯涓婁篃鏄唴閮ㄧ敤綰跨▼姹犲疄鐜扮殑緗簡(jiǎn)錛屾渶鍚庣殑緇撴灉鏄疘O鏈変釜綰跨▼姹狅紝浣犲簲鐢ㄤ篃闇瑕佷竴涓嚎紼嬫睜...... 寰堝鏂囨。鍏跺疄宸茬粡鎸囧嚭浜?jiǎn)杩欏甫鏉ョ殑绾拷E媍ontext-switch甯︽潵鐨勪唬浠楓傚湪linux 騫沖彴涓婏紝鍏充簬緗戠粶AIO涓鐩存槸鏀瑰姩鏈澶氱殑鍦版柟錛?.4鐨勫勾浠e氨鏈夊緢澶欰IO鍐呮牳patch,鏈钁楀悕鐨勫簲璇ョ畻鏄疭GI閭d釜銆備絾鏄竴鐩村埌2.6鍐呮牳鍙戝竷錛岀綉緇滄ā鍧楃殑AIO涓鐩存病鏈夎繘鍏ョǔ瀹氬唴鏍哥増鏈?澶ч儴鍒嗛兘鏄嬌鐢ㄧ敤鎴風(fēng)嚎紼嬫ā鎷熸柟娉曪紝鍦ㄤ嬌鐢ㄤ簡(jiǎn)NPTL鐨刲inux涓婇潰鍏跺疄鍜寃indows鐨?strong>瀹屾垚绔彛</strong>鍩烘湰涓婂樊涓嶅浜?銆?.6鍐呮牳鎵鏀寔鐨凙IO鐗規(guī)寚紓佺洏鐨凙IO---鏀寔io_submit(),io_getevents()浠ュ強(qiáng)瀵笵irect IO鐨勬敮鎸?灝辨槸緇曡繃VFS緋葷粺buffer鐩存帴鍐欑‖鐩橈紝瀵逛簬嫻佹湇鍔″櫒鍦ㄥ唴瀛樺鉤紼蟲т笂鏈夌浉褰撳府鍔?銆?br /> 鎵浠ワ紝鍓╀笅鐨剆elect妯″瀷鍩烘湰涓婂氨鏄垜浠湪linux涓婇潰鐨勫敮涓閫夋嫨錛屽叾瀹烇紝濡傛灉鍔犱笂no-block socket鐨勯厤緗紝鍙互瀹屾垚涓涓?浼?AIO鐨勫疄鐜幫紝鍙笉榪囨帹鍔ㄥ姏鍦ㄤ簬浣犺屼笉鏄痮s鑰屽凡銆備笉榪囦紶緇熺殑select/poll鍑芥暟鏈夌潃涓浜涙棤娉曞繊鍙楃殑緙虹偣錛屾墍浠ユ敼榪涗竴鐩存槸2.4-2.5寮鍙戠増鏈唴鏍哥殑浠誨姟錛屽寘鎷?dev/poll錛宺ealtime signal絳夌瓑銆傛渶緇堬紝Davide Libenzi寮鍙戠殑<strong>epoll</strong>榪涘叆2.6鍐呮牳鎴愪負(fù)姝e紡鐨勮В鍐蟲柟妗?br /> <strong><br /> 3銆?strong>epoll</strong>鐨勪紭鐐?/strong><br /> <1>鏀寔涓涓繘紼嬫墦寮澶ф暟鐩殑socket鎻忚堪絎?FD)<br /> select 鏈涓嶈兘蹇嶅彈鐨勬槸涓涓繘紼嬫墍鎵撳紑鐨凢D鏄湁涓瀹氶檺鍒剁殑錛岀敱FD_SETSIZE璁劇疆錛岄粯璁ゅ兼槸2048銆傚浜庨偅浜涢渶瑕佹敮鎸佺殑涓婁竾榪炴帴鏁扮洰鐨処M鏈嶅姟鍣ㄦ潵璇存樉鐒跺お灝戜簡(jiǎn)銆傝繖鏃跺欎綘涓鏄彲浠ラ夋嫨淇敼榪欎釜瀹忕劧鍚庨噸鏂扮紪璇戝唴鏍革紝涓嶈繃璧勬枡涔熷悓鏃舵寚鍑?guó)櫩欐牱浼?xì)甯︽潵緗戠粶鏁堢巼鐨勪笅闄嶏紝浜屾槸鍙互閫夋嫨澶氳繘紼嬬殑瑙e喅鏂規(guī)(浼犵粺鐨凙pache鏂規(guī))錛屼笉榪囪櫧鐒秎inux涓婇潰鍒涘緩榪涚▼鐨勪唬浠鋒瘮杈冨皬錛屼絾浠嶆棫鏄笉鍙拷瑙嗙殑錛屽姞涓婅繘紼嬮棿鏁版嵁鍚屾榪滄瘮涓嶄笂綰跨▼闂村悓姝ョ殑楂樻晥錛屾墍浠ヤ篃涓嶆槸涓縐嶅畬緹庣殑鏂規(guī)銆備笉榪?nbsp;<strong>epoll</strong>鍒欐病鏈夎繖涓檺鍒訛紝瀹冩墍鏀寔鐨凢D涓婇檺鏄渶澶у彲浠ユ墦寮鏂囦歡鐨勬暟鐩紝榪欎釜鏁板瓧涓鑸繙澶т簬2048,涓句釜渚嬪瓙,鍦?GB鍐呭瓨鐨勬満鍣ㄤ笂澶х害鏄?0涓囧乏鍙籌紝鍏蜂綋鏁扮洰鍙互cat /proc/sys/fs/file-max瀵熺湅,涓鑸潵璇磋繖涓暟鐩拰緋葷粺鍐呭瓨鍏崇郴寰堝ぇ銆?br /> <2>IO鏁堢巼涓嶉殢FD鏁扮洰澧炲姞鑰岀嚎鎬т笅闄?br /> 浼犵粺鐨剆elect/poll鍙︿竴涓嚧鍛藉急鐐瑰氨鏄綋浣犳嫢鏈変竴涓緢澶х殑socket闆嗗悎錛屼笉榪囩敱浜庣綉緇滃歡鏃訛紝浠諱竴鏃墮棿鍙湁閮ㄥ垎鐨剆ocket鏄?媧昏穬"鐨勶紝浣嗘槸select/poll姣忔璋冪敤閮戒細(xì)綰挎ф壂鎻忓叏閮ㄧ殑闆嗗悎錛屽鑷存晥鐜囧憟鐜扮嚎鎬т笅闄嶃備絾鏄?strong>epoll</strong>涓嶅瓨鍦ㄨ繖涓棶棰橈紝瀹冨彧浼?xì)瀵?媧昏穬"鐨剆ocket榪涜鎿嶄綔---榪欐槸鍥犱負(fù)鍦ㄥ唴鏍稿疄鐜頒腑<strong>epoll</strong>鏄牴鎹瘡涓猣d涓婇潰鐨刢allback鍑芥暟瀹炵幇鐨勩傞偅涔堬紝鍙湁"媧昏穬"鐨剆ocket鎵嶄細(xì)涓誨姩鐨勫幓璋冪敤 callback鍑芥暟錛屽叾浠杋dle鐘舵乻ocket鍒欎笉浼?xì)锛屽湪杩欑偣涓婂Q?strong>epoll</strong>瀹炵幇浜?jiǎn)涓涓?浼?AIO錛屽洜涓鴻繖鏃跺欐帹鍔ㄥ姏鍦╫s鍐呮牳銆傚湪涓浜?benchmark涓紝濡傛灉鎵鏈夌殑socket鍩烘湰涓婇兘鏄椿璺冪殑---姣斿涓涓珮閫烲AN鐜錛?strong>epoll</strong>騫朵笉姣攕elect/poll鏈変粈涔堟晥鐜囷紝鐩稿弽錛屽鏋滆繃澶氫嬌鐢?strong>epoll</strong>_ctl,鏁堢巼鐩告瘮榪樻湁紼嶅井鐨勪笅闄嶃備絾鏄竴鏃︿嬌鐢╥dle connections妯℃嫙WAN鐜,<strong>epoll</strong>鐨勬晥鐜囧氨榪滃湪select/poll涔嬩笂浜?jiǎn)銆?br /> <3>浣跨敤mmap鍔犻熷唴鏍鎬笌鐢ㄦ埛絀洪棿鐨勬秷鎭紶閫掋?br /> 榪欑偣瀹為檯涓婃秹鍙?qiáng)鍒?strong>epoll</strong>鐨勫叿浣撳疄鐜頒簡(jiǎn)銆傛棤璁烘槸select,poll榪樻槸<strong>epoll</strong>閮介渶瑕佸唴鏍告妸FD娑堟伅閫氱煡緇欑敤鎴風(fēng)┖闂達(dá)紝濡備綍閬垮厤涓嶅繀瑕佺殑鍐呭瓨鎷瘋礉灝卞緢閲嶈錛屽湪榪欑偣涓婏紝<strong>epoll</strong>鏄氳繃鍐呮牳浜庣敤鎴風(fēng)┖闂磎map鍚屼竴鍧楀唴瀛樺疄鐜扮殑銆傝屽鏋滀綘鎯蟲垜涓鏍蜂粠2.5鍐呮牳灝卞叧娉?strong>epoll</strong>鐨勮瘽錛屼竴瀹氫笉浼?xì)蹇樿鎵嬪?mmap榪欎竴姝ョ殑銆?br /> <4>鍐呮牳寰皟<br /> 榪欎竴鐐瑰叾瀹炰笉綆?strong>epoll</strong>鐨勪紭鐐逛簡(jiǎn)錛岃屾槸鏁翠釜linux騫沖彴鐨勪紭鐐廣備篃璁鎬綘鍙互鎬鐤憀inux騫沖彴錛屼絾鏄綘鏃犳硶鍥為伩linux騫沖彴璧嬩簣浣犲井璋冨唴鏍哥殑鑳藉姏銆傛瘮濡傦紝鍐呮牳TCP/IP鍗忚鏍堜嬌鐢ㄥ唴瀛樻睜綆$悊sk_buff緇撴瀯錛岄偅涔堝彲浠ュ湪榪愯鏃舵湡鍔ㄦ佽皟鏁磋繖涓唴瀛榩ool(skb_head_pool)鐨勫ぇ灝?-- 閫氳繃echo XXXX>/proc/sys/net/core/hot_list_length瀹屾垚銆傚啀姣斿listen鍑芥暟鐨勭2涓弬鏁?TCP瀹屾垚3嬈℃彙鎵嬬殑鏁版嵁鍖呴槦鍒楅暱搴?錛屼篃鍙互鏍規(guī)嵁浣犲鉤鍙板唴瀛樺ぇ灝忓姩鎬佽皟鏁淬傛洿鐢氳嚦鍦ㄤ竴涓暟鎹寘闈㈡暟鐩法澶т絾鍚屾椂姣忎釜鏁版嵁鍖呮湰韜ぇ灝忓嵈寰堝皬鐨勭壒孌婄郴緇熶笂灝濊瘯鏈鏂扮殑NAPI緗戝崱椹卞姩鏋舵瀯銆?br /> 4銆?strong>epoll</strong>鐨勫伐浣滄ā寮?br /> 浠や漢楂樺叴鐨勬槸錛?.6鍐呮牳鐨?strong>epoll</strong>姣斿叾2.5寮鍙戠増鏈殑/dev/<strong>epoll</strong>綆媧佷簡(jiǎn)璁稿錛屾墍浠ワ紝澶ч儴鍒嗘儏鍐典笅錛屽己澶х殑涓滆タ寰寰鏄畝鍗曠殑銆傚敮涓鏈夌偣楹葷儲(chǔ)鏄?strong>epoll</strong>鏈?縐嶅伐浣滄柟寮?LT鍜孍T銆?br /> LT(level triggered)鏄己鐪佺殑宸ヤ綔鏂瑰紡錛屽茍涓斿悓鏃舵敮鎸乥lock鍜宯o-block socket.鍦ㄨ繖縐嶅仛娉曚腑錛屽唴鏍稿憡璇変綘涓涓枃浠舵弿榪扮鏄惁灝辯華浜?jiǎn)锛岀劧鍚庝綘鍙互瀵箻q欎釜灝辯華鐨刦d榪涜IO鎿嶄綔銆傚鏋滀綘涓嶄綔浠諱綍鎿嶄綔錛屽唴鏍歌繕鏄細(xì)緇х畫閫氱煡浣犵殑錛屾墍浠ワ紝榪欑妯″紡緙栫▼鍑洪敊璇彲鑳芥ц灝忎竴鐐廣備紶緇熺殑select/poll閮芥槸榪欑妯″瀷鐨勪唬琛紟<br /> ET (edge-triggered)鏄珮閫熷伐浣滄柟寮忥紝鍙敮鎸乶o-block socket銆傚湪榪欑妯″紡涓嬶紝褰撴弿榪扮浠庢湭灝辯華鍙樹負(fù)灝辯華鏃訛紝鍐呮牳閫氳繃<strong>epoll</strong>鍛婅瘔浣犮傜劧鍚庡畠浼?xì)鍋囪浣犵煡閬撴枃錃g鎻忚堪絎﹀凡緇忓氨緇紝騫朵笖涓嶄細(xì)鍐嶄負(fù)閭d釜鏂囦歡鎻忚堪絎﹀彂閫佹洿澶氱殑灝辯華閫氱煡錛岀洿鍒頒綘鍋氫簡(jiǎn)鏌愪簺鎿嶄綔瀵艱嚧閭d釜鏂囦歡鎻忚堪絎︿笉鍐嶄負(fù)灝辯華鐘舵佷簡(jiǎn)(姣斿錛屼綘鍦ㄥ彂閫侊紝鎺ユ敹鎴栬呮帴鏀惰姹傦紝鎴栬呭彂閫佹帴鏀剁殑鏁版嵁灝戜簬涓瀹氶噺鏃跺鑷翠簡(jiǎn)涓涓狤WOULDBLOCK 閿欒錛夈備絾鏄娉ㄦ剰錛屽鏋滀竴鐩翠笉瀵硅繖涓猣d浣淚O鎿嶄綔(浠庤屽鑷村畠鍐嶆鍙樻垚鏈氨緇?錛屽唴鏍鎬笉浼?xì)鍙戦佹洿澶氱殑閫氱煡(only once),涓嶈繃鍦═CP鍗忚涓紝ET妯″紡鐨勫姞閫熸晥鐢ㄤ粛闇瑕佹洿澶氱殑benchmark紜銆?br /> <strong>epoll</strong>鍙湁<strong>epoll</strong>_create,<strong>epoll</strong>_ctl,<strong>epoll</strong>_wait 3涓郴緇熻皟鐢紝鍏蜂綋鐢ㄦ硶璇峰弬鑰?a >http://www.xmailserver.org/linux-patches/nio-improve.html</a> 錛屽湪<a >http://www.kegel.com/rn/</a>涔熸湁涓涓畬鏁寸殑渚嬪瓙錛屽ぇ瀹朵竴鐪嬪氨鐭ラ亾濡備綍浣跨敤浜?br /> Leader/follower妯″紡綰跨▼pool瀹炵幇錛屼互鍙?qiáng)鍜?strong>epoll</strong>鐨勯厤鍚堛?br /> <br /> <strong>5銆?nbsp;<strong>epoll</strong>鐨勪嬌鐢ㄦ柟娉?/strong><br />     棣栧厛閫氳繃create_<strong>epoll</strong>(int maxfds)鏉ュ垱寤轟竴涓?strong>epoll</strong>鐨勫彞鏌勶紝鍏朵腑maxfds涓轟綘<strong>epoll</strong>鎵鏀寔鐨勬渶澶у彞鏌勬暟銆傝繖涓嚱鏁頒細(xì)榪斿洖涓涓柊鐨?strong>epoll</strong>鍙ユ焺錛屼箣鍚庣殑鎵鏈夋搷浣滃皢閫氳繃榪欎釜鍙ユ焺鏉ヨ繘琛屾搷浣溿傚湪鐢ㄥ畬涔嬪悗錛岃寰楃敤close()鏉ュ叧闂繖涓垱寤哄嚭鏉ョ殑<strong>epoll</strong>鍙ユ焺銆?涔嬪悗鍦ㄤ綘鐨勭綉緇滀富寰幆閲岄潰錛屾瘡涓甯х殑璋冪敤<strong>epoll</strong>_wait(int epfd, <strong>epoll</strong>_event events, int max events, int timeout)鏉ユ煡璇㈡墍鏈夌殑緗戠粶鎺ュ彛錛岀湅鍝竴涓彲浠ヨ錛屽摢涓涓彲浠ュ啓浜?jiǎn)銆傚熀鏈殑璇硶涓猴細(xì) <br /> nfds = <strong>epoll</strong>_wait(kdpfd, events, maxevents, -1); <br /> 鍏朵腑kdpfd涓虹敤<strong>epoll</strong>_create鍒涘緩涔嬪悗鐨勫彞鏌勶紝events鏄竴涓?strong>epoll</strong>_event*鐨勬寚閽堬紝褰?strong>epoll</strong>_wait榪欎釜鍑芥暟鎿嶄綔鎴愬姛涔嬪悗錛?strong>epoll</strong>_events閲岄潰灝嗗偍瀛樻墍鏈夌殑璇誨啓浜嬩歡銆俶ax_events鏄綋鍓嶉渶瑕佺洃鍚殑鎵鏈塻ocket鍙ユ焺鏁般傛渶鍚庝竴涓猼imeout鏄?strong>epoll</strong>_wait鐨勮秴鏃訛紝涓?鐨勬椂鍊欒〃紺洪┈涓婅繑鍥烇紝涓?1鐨勬椂鍊欒〃紺轟竴鐩寸瓑涓嬪幓錛岀洿鍒版湁浜嬩歡鑼冨洿錛屼負(fù)浠繪剰姝f暣鏁扮殑鏃跺欒〃紺虹瓑榪欎箞闀跨殑鏃墮棿錛屽鏋滀竴鐩存病鏈変簨浠訛紝鍒欒寖鍥淬備竴鑸鏋滅綉緇滀富寰幆鏄崟鐙殑綰跨▼鐨勮瘽錛屽彲浠ョ敤-1鏉ョ瓑錛岃繖鏍峰彲浠ヤ繚璇佷竴浜涙晥鐜囷紝濡傛灉鏄拰涓婚昏緫鍦ㄥ悓涓涓嚎紼嬬殑璇濓紝鍒欏彲浠ョ敤0鏉ヤ繚璇佷富寰幆鐨勬晥鐜囥?/p> <p><strong>epoll</strong>_wait鑼冨洿涔嬪悗搴旇鏄竴涓驚鐜紝閬嶅埄鎵鏈夌殑浜嬩歡錛?nbsp;<br /> for(n = 0; n < nfds; ++n) { <br />                 if(events[n].data.fd == listener) { //濡傛灉鏄富socket鐨勪簨浠剁殑璇濓紝鍒欒〃紺烘湁鏂拌繛鎺ヨ繘鍏ヤ簡(jiǎn)錛岃繘琛屾柊榪炴帴鐨勫鐞嗐?nbsp;<br />                     client = accept(listener, (struct sockaddr *) &local, <br />                                     &addrlen); <br />                     if(client < 0){ <br />                         perror("accept"); <br />                         continue; <br />                     } <br />                     setnonblocking(client); // 灝嗘柊榪炴帴緗簬闈為樆濉炴ā寮?nbsp;<br />                     ev.events = EPOLLIN | EPOLLET; // 騫朵笖灝嗘柊榪炴帴涔熷姞鍏?strong>EPOLL</strong>鐨勭洃鍚槦鍒椼?nbsp;<br /> 娉ㄦ剰錛岃繖閲岀殑鍙傛暟EPOLLIN | EPOLLET騫舵病鏈夎緗鍐檚ocket鐨勭洃鍚紝濡傛灉鏈夊啓鎿嶄綔鐨勮瘽錛岃繖涓椂鍊?strong>epoll</strong>鏄笉浼?xì)杩斿洖浜嬩欢鐨勫Q屽鏋滆瀵瑰啓鎿嶄綔涔熺洃鍚殑璇濓紝搴旇鏄疎POLLIN | EPOLLOUT | EPOLLET <br />                     ev.data.fd = client; <br />                     if (<strong>epoll</strong>_ctl(kdpfd, <strong>EPOLL</strong>_CTL_ADD, client, &ev) < 0) { <br /> // 璁劇疆濂絜vent涔嬪悗錛屽皢榪欎釜鏂扮殑event閫氳繃<strong>epoll</strong>_ctl鍔犲叆鍒?strong>epoll</strong>鐨勭洃鍚槦鍒楅噷闈紝榪欓噷鐢?strong>EPOLL</strong>_CTL_ADD鏉ュ姞涓涓柊鐨?strong>epoll</strong>浜嬩歡錛岄氳繃<strong>EPOLL</strong>_CTL_DEL鏉ュ噺灝戜竴涓?strong>epoll</strong>浜嬩歡錛岄氳繃<strong>EPOLL</strong>_CTL_MOD鏉ユ敼鍙樹竴涓簨浠剁殑鐩戝惉鏂瑰紡銆?nbsp;<br />                         fprintf(stderr, "<strong>epoll</strong> set insertion error: fd=%d0, <br />                                 client); <br />                         return -1; <br />                     } <br />                 } <br />                 else // 濡傛灉涓嶆槸涓籹ocket鐨勪簨浠剁殑璇濓紝鍒欎唬琛ㄦ槸涓涓敤鎴穝ocket鐨勪簨浠訛紝鍒欐潵澶勭悊榪欎釜鐢ㄦ埛socket鐨勪簨鎯咃紝姣斿璇磖ead(fd,xxx)涔嬬被鐨勶紝鎴栬呬竴浜涘叾浠栫殑澶勭悊銆?nbsp;<br />                     do_use_fd(events[n].data.fd); <br /> }</p> <p>瀵癸紝<strong>epoll</strong>鐨勬搷浣滃氨榪欎箞綆鍗曪紝鎬誨叡涓嶈繃4涓狝PI錛?strong>epoll</strong>_create, <strong>epoll</strong>_ctl, <strong>epoll</strong>_wait鍜宑lose銆?nbsp;<br /> 濡傛灉鎮(zhèn)ㄥ<strong>epoll</strong>鐨勬晥鐜囪繕涓嶅お浜?jiǎn)瑙eQ岃鍙傝冩垜涔嬪墠鍏充簬緗戠粶娓告垙鐨勭綉緇滅紪紼嬬瓑鐩稿叧鐨勬枃绔犮?/p> <p><br /> 浠ュ墠鍏徃鐨勬湇鍔″櫒閮芥槸浣跨敤HTTP榪炴帴錛屼絾鏄繖鏍風(fēng)殑璇濓紝鍦ㄦ墜鏈虹洰鍓嶇殑緗戠粶鎯呭喌涓嬩笉浣嗘樉寰楅熷害杈冩參錛岃屼笖涓嶇ǔ瀹氥傚洜姝ゅぇ瀹朵竴鑷村悓鎰忕敤SOCKET鏉ヨ繘琛岃繛鎺ャ傝櫧鐒朵嬌鐢⊿OCKET涔嬪悗錛屽浜庣敤鎴風(fēng)殑璐圭敤鍙兘浼?xì)澧炲?鐢變簬鏄敤浜?jiǎn)CMNET鑰岄潪CMWAP)錛屼絾鏄紝縐夌潃鐢ㄦ埛浣撻獙鑷充笂鐨勫師鍒欙紝鐩鎬俊澶у榪樻槸鑳藉鎺ュ彈鐨?甯屾湜閭d簺鐜╁鏈堟湯鏀跺埌甯愬崟涓嶅悗鑳藉淇濇寔鍏嬪埗...)銆?br /> 榪欐鐨勬湇鍔″櫒璁捐涓紝鏈閲嶈鐨勪竴涓獊鐮達(dá)紝鏄嬌鐢ㄤ簡(jiǎn)<strong>EPOLL</strong>妯″瀷錛岃櫧鐒跺涔嬩篃鏄竴鐭ュ崐瑙o紝浣嗘槸鏃㈢劧鍦ㄥ悇澶C緗戞父涓凡緇忕粡榪囦簡(jiǎn)濡傛涓ラ叿鐨勮冮獙錛岀浉淇′粬涓嶄細(xì)璁╂垜浠け鏈涳紝浣跨敤鍚庣殑緇撴灉錛岀‘瀹炰篃鏄〃鐜扮浉褰撲笉閿欍傚湪榪欓噷錛屾垜榪樻槸涓昏澶ц嚧浠嬬粛涓涓嬭繖涓ā鍨嬬殑緇撴瀯銆?br /> 6銆丩inux涓?strong>EPOll</strong>緙栫▼瀹炰緥<br /> <strong>EPOLL</strong>妯″瀷浼間箮鍙湁涓縐嶆牸寮忥紝鎵浠ュぇ瀹跺彧瑕佸弬鑰冩垜涓嬮潰鐨勪唬鐮侊紝灝辮兘澶熷<strong>EPOLL</strong>鏈夋墍浜?jiǎn)瑙d簡(jiǎn)锛屼唬鐮佺殑瑙i噴閮藉凡缁忓湪娉ㄩ噴涓Q?/p> <p>while (TRUE)<br /> {<br /> int nfds = <strong>epoll</strong>_wait (m_<strong>epoll</strong>_fd, m_events, MAX_EVENTS, <strong>EPOLL</strong>_TIME_OUT);//絳夊緟<strong>EPOLL</strong>鏃墮棿鐨勫彂鐢燂紝鐩稿綋浜庣洃鍚紝鑷充簬鐩稿叧鐨勭鍙o紝闇瑕佸湪鍒濆鍖?strong>EPOLL</strong>鐨勬椂鍊欑粦瀹氥?br /> if (nfds <= 0)<br /> continue;<br /> m_bOnTimeChecking = FALSE;<br /> G_CurTime = time(NULL);<br /> for (int i=0; i<br /> {<br /> try<br /> {<br /> if (m_events[i].data.fd == m_listen_http_fd)//濡傛灉鏂扮洃嫻嬪埌涓涓狧TTP鐢ㄦ埛榪炴帴鍒扮粦瀹氱殑HTTP绔彛錛屽緩绔嬫柊鐨勮繛鎺ャ傜敱浜庢垜浠柊閲囩敤浜?jiǎn)SOCKET榪炴帴錛屾墍浠ュ熀鏈病鐢ㄣ?br /> {<br /> OnAcceptHttpEpoll ();<br /> }<br /> else if (m_events[i].data.fd == m_listen_sock_fd)//濡傛灉鏂扮洃嫻嬪埌涓涓猄OCKET鐢ㄦ埛榪炴帴鍒頒簡(jiǎn)緇戝畾鐨凷OCKET绔彛錛屽緩绔嬫柊鐨勮繛鎺ャ?br /> {<br /> OnAcceptSockEpoll ();<br /> }<br /> else if (m_events[i].events & EPOLLIN)//濡傛灉鏄凡緇忚繛鎺ョ殑鐢ㄦ埛錛屽茍涓旀敹鍒版暟鎹紝閭d箞榪涜璇誨叆銆?br /> {<br /> OnReadEpoll (i);<br /> }</p> <p>OnWriteEpoll (i);//鏌ョ湅褰撳墠鐨勬椿鍔ㄨ繛鎺ユ槸鍚︽湁闇瑕佸啓鍑虹殑鏁版嵁銆?br /> }<br /> catch (int)<br /> {<br /> PRINTF ("CATCH鎹曡幏閿欒\n");<br /> continue;<br /> }<br /> }<br /> m_bOnTimeChecking = TRUE;<br /> OnTimer ();//榪涜涓浜涘畾鏃剁殑鎿嶄綔錛屼富瑕佸氨鏄垹闄や竴浜涚煭綰跨敤鎴風(fēng)瓑銆?br /> }<br /> 鍏跺疄<strong>EPOLL</strong>鐨勭簿鍗庯紝涔熷氨鏄笂榪扮殑鍑犳鐭煭鐨勪唬鐮侊紝鐪嬫潵鏃朵唬鐪熺殑涓嶅悓浜?jiǎn)锛屼互鍓嶅浣曟帴鍙楀ぇ閲忕敤鎴窐q炴帴鐨勯棶棰橈紝鐜板湪鍗磋濡傛杞繪澗鐨勬悶瀹氾紝鐪熸槸璁╀漢涓嶅緱涓嶆劅鍙癸紝瀵瑰摢銆?/p> <p><br /> <strong>鎬葷粨<br /> </strong>Windows<strong>瀹屾垚绔彛</strong>涓嶭inux <strong>epoll</strong>鎶鏈柟妗堟槸榪?涓鉤鍙頒笂瀹炵幇寮傛IO鍜岃璁″紑鍙戜竴涓ぇ瀹歸噺錛屽叿鍙墿灞曟х殑winsock紼嬪簭鎸囨湇鍔$▼搴忕殑寰堝ソ鐨勯夋嫨錛屾湰鏂囧榪?涓妧鏈殑瀹炵幇鍘熺悊鍜屽疄闄呯殑浣跨敤鏂規(guī)硶鍋氫簡(jiǎn)涓涓緇嗙殑浠嬬粛銆?/p> @import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.shnenglu.com/singohgod/aggbug/152376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/singohgod/" target="_blank">澶у疂澶╁ぉ瑙?/a> 2011-08-03 17:43 <a href="http://www.shnenglu.com/singohgod/archive/2011/08/03/152376.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://wy172.com" target="_blank">亚洲一区国产</a>| <a href="http://y77778.com" target="_blank">久久婷婷综合激情</a>| <a href="http://shruhan.com" target="_blank">一区二区三区在线观看国产</a>| <a href="http://pinyuanad.com" target="_blank">亚洲激情在线播放</a>| <a href="http://17ang.com" target="_blank">国产日韩欧美91</a>| <a href="http://6633kj.com" target="_blank">亚洲精品国产精品国自产在线</a>| <a href="http://missav88.com" target="_blank">国产视频一区三区</a>| <a href="http://www18bbav.com" target="_blank">亚洲精品国产精品久久清纯直播</a>| <a href="http://sclddn.com" target="_blank">黑丝一区二区三区</a>| <a href="http://lfxhfh.com" target="_blank">亚洲欧美中文字幕</a>| <a href="http://e789a.com" target="_blank">一区二区激情</a>| <a href="http://www-833898.com" target="_blank">欧美成人激情在线</a>| <a href="http://wwwavtb1122.com" target="_blank">久久久免费精品视频</a>| <a href="http://jdss777.com" target="_blank">欧美性开放视频</a>| <a href="http://huaihuaihuai.com" target="_blank">亚洲国产精品久久久久秋霞蜜臀</a>| <a href="http://www311pi.com" target="_blank">国内自拍视频一区二区三区</a>| <a href="http://4hup23.com" target="_blank">日韩亚洲视频在线</a>| <a href="http://91sp136.com" target="_blank">亚洲美女电影在线</a>| <a href="http://778877k.com" target="_blank">欧美a级大片</a>| <a href="http://22abb.com" target="_blank">欧美高清视频在线</a>| <a href="http://8xyxs1.com" target="_blank">亚洲承认在线</a>| <a href="http://300644.com" target="_blank">美女精品网站</a>| <a href="http://353033.com" target="_blank">欧美r片在线</a>| <a href="http://08xxxc.com" target="_blank">1024成人</a>| <a href="http://199372.com" target="_blank">欧美xxxx在线观看</a>| <a href="http://www-136445.com" target="_blank">欧美韩国在线</a>| <a href="http://737sihu.com" target="_blank">亚洲精品123区</a>| <a href="http://dusenborg.com" target="_blank">免费久久99精品国产</a>| <a href="http://www5123ri.com" target="_blank">欧美.www</a>| <a href="http://428820.com" target="_blank">亚洲伦理在线免费看</a>| <a href="http://1355456.com" target="_blank">蜜桃av久久久亚洲精品</a>| <a href="http://119552.com" target="_blank">午夜精品福利电影</a>| <a href="http://anxingou365.com" target="_blank">麻豆成人综合网</a>| <a href="http://by99969.com" target="_blank">久久av一区二区</a>| <a href="http://97sgg.com" target="_blank">一区二区国产精品</a>| <a href="http://414670.com" target="_blank">亚洲一区二区三区成人在线视频精品 </a>| <a href="http://51duanxinmao.com" target="_blank">亚洲制服少妇</a>| <a href="http://613by.com" target="_blank">久久九九全国免费精品观看</a>| <a href="http://gffffg.com" target="_blank">欧美一级视频精品观看</a>| <a href="http://xdlot.com" target="_blank">亚洲人成亚洲人成在线观看</a>| <a href="http://9931111.com" target="_blank">亚洲第一精品夜夜躁人人躁</a>| <a href="http://vipaqdx29.com" target="_blank">久久青草欧美一区二区三区</a>| <a href="http://by1422.com" target="_blank">欧美成人综合一区</a>| <a href="http://wawabt.com" target="_blank">日韩特黄影片</a>| <a href="http://8eya.com" target="_blank">国产精品爽爽ⅴa在线观看</a>| <a href="http://smiczbb.com" target="_blank">亚洲欧美国产一区二区三区</a>| <a href="http://710191.com" target="_blank">久久久久久久久岛国免费</a>| <a href="http://dailymailnepal.com" target="_blank">国内成人精品2018免费看</a>| <a href="http://hczztj.com" target="_blank">久久亚洲视频</a>| <a href="http://s3yx.com" target="_blank">99re6热在线精品视频播放速度</a>| <a href="http://017492.com" target="_blank">亚洲一区免费在线观看</a>| <a href="http://cancerrxa.com" target="_blank">国产精品日韩久久久</a>| <a href="http://8111357.com" target="_blank">欧美一区二区福利在线</a>| <a href="http://qq6699.com" target="_blank">欧美sm重口味系列视频在线观看</a>| <a href="http://www-067.com" target="_blank">亚洲免费观看高清完整版在线观看熊</a>| <a href="http://www151zh.com" target="_blank">欧美三级午夜理伦三级中文幕</a>| <a href="http://hhh699.com" target="_blank">亚洲欧美视频</a>| <a href="http://tingxihuan.com" target="_blank">欧美成人免费网站</a>| <a href="http://srojsy.com" target="_blank">亚洲一区二区三区在线观看视频</a>| <a href="http://www-kkjj88.com" target="_blank">国产日韩精品一区观看</a>| <a href="http://maiiyou.com" target="_blank">老司机午夜精品</a>| <a href="http://xigou666.com" target="_blank">一区二区三区成人精品</a>| <a href="http://wewe520.com" target="_blank">久久久7777</a>| <a href="http://342889.com" target="_blank">日韩亚洲在线观看</a>| <a href="http://jivbus.com" target="_blank">国产日本欧美一区二区三区</a>| <a href="http://whaylan.com" target="_blank">你懂的国产精品</a>| <a href="http://clgtzz.com" target="_blank">亚洲欧美精品在线观看</a>| <a href="http://shyihegu.com" target="_blank">亚洲丶国产丶欧美一区二区三区</a>| <a href="http://xb989.com" target="_blank">亚洲视频网站在线观看</a>| <a href="http://345kt.com" target="_blank">精品二区久久</a>| <a href="http://senlin86.com" target="_blank">国产精品免费网站</a>| <a href="http://mkaqiu.com" target="_blank">欧美成人在线影院</a>| <a href="http://57sa.com" target="_blank">欧美一区二区三区日韩</a>| <a href="http://cnlbogs.com" target="_blank">亚洲精品视频在线观看网站</a>| <a href="http://789583.com" target="_blank">久久免费国产精品</a>| <a href="http://123hiba.com" target="_blank">亚洲视频一区</a>| <a href="http://jorhom.com" target="_blank">亚洲三级电影全部在线观看高清</a>| <a href="http://my1315.com" target="_blank">国产精品永久免费</a>| <a href="http://by2735.com" target="_blank">欧美精品亚洲</a>| <a href="http://394141.com" target="_blank">久久香蕉国产线看观看av</a>| <a href="http://8xn66w.com" target="_blank">亚洲美女黄网</a>| <a href="http://hzhzzz.com" target="_blank">亚洲第一级黄色片</a>| <a href="http://xuanxuan88.com" target="_blank">久久久免费精品视频</a>| <a href="http://1588vip.com" target="_blank">亚洲无人区一区</a>| <a href="http://gzw33.com" target="_blank">亚洲理论在线</a>| <a href="http://777888789.com" target="_blank">在线看一区二区</a>| <a href="http://wanmajc.com" target="_blank">国产亚洲精品资源在线26u</a>| <a href="http://794579.com" target="_blank">欧美日韩一区二区三区四区五区</a>| <a href="http://9952222.com" target="_blank">久久野战av</a>| <a href="http://www-82622.com" target="_blank">欧美一区二区日韩</a>| <a href="http://807225.com" target="_blank">亚洲一区日韩在线</a>| <a href="http://8x588.com" target="_blank">亚洲卡通欧美制服中文</a>| <a href="http://fsxinruiph.com" target="_blank">欧美刺激午夜性久久久久久久</a>| <a href="http://yw1396.com" target="_blank">先锋影音网一区二区</a>| <a href="http://w7727.com" target="_blank">亚洲天堂视频在线观看</a>| <a href="http://33wbwb.com" target="_blank">亚洲美女在线看</a>| <a href="http://ydpszcn.com" target="_blank">亚洲韩国一区二区三区</a>| <a href="http://www4848xx.com" target="_blank">国产综合久久</a>| <a href="http://778kb.com" target="_blank">国产亚洲成精品久久</a>| <a href="http://cp50088.com" target="_blank">国产精品乱码人人做人人爱</a>| <a href="http://baidijs.com" target="_blank">欧美理论大片</a>| <a href="http://yw-95588.com" target="_blank">欧美日韩国产首页</a>| <a href="http://yp889.com" target="_blank">欧美剧在线观看</a>| <a href="http://26163c.com" target="_blank">欧美日韩精品欧美日韩精品 </a>| <a href="http://036762.com" target="_blank">亚洲电影第1页</a>| <a href="http://zucai168.com" target="_blank">男女av一区三区二区色多</a>| <a href="http://haomscq.com" target="_blank">久久久免费精品</a>| <a href="http://220fuke.com" target="_blank">久久一二三区</a>| <a href="http://by3799.com" target="_blank">麻豆国产精品va在线观看不卡</a>| <a href="http://mmmm26.com" target="_blank">久久婷婷麻豆</a>| <a href="http://www19898.com" target="_blank">久久一二三区</a>| <a href="http://myav2.com" target="_blank">美日韩精品视频</a>| <a href="http://02326a.com" target="_blank">欧美电影专区</a>| <a href="http://19zet.com" target="_blank">亚洲国产精彩中文乱码av在线播放</a>| <a href="http://ziwufuren.com" target="_blank">欧美.日韩.国产.一区.二区</a>| <a href="http://wwww20.com" target="_blank">免费不卡中文字幕视频</a>| <a href="http://kakatok.com" target="_blank">欧美fxxxxxx另类</a>| <a href="http://13751144594.com" target="_blank">欧美顶级少妇做爰</a>| <a href="http://805185.com" target="_blank">欧美高清在线视频观看不卡</a>| <a href="http://9e67.com" target="_blank">免费欧美在线视频</a>| <a href="http://pear9.com" target="_blank">亚洲国产天堂久久综合网</a>| <a href="http://cancerrxa.com" target="_blank">亚洲韩国精品一区</a>| <a href="http://www-78733.com" target="_blank">亚洲精品乱码久久久久久蜜桃91</a>| <a href="http://261262.com" target="_blank">亚洲日本视频</a>| <a href="http://bgdete.com" target="_blank">中文高清一区</a>| <a href="http://23230066.com" target="_blank">午夜电影亚洲</a>| <a href="http://www92444.com" target="_blank">久久理论片午夜琪琪电影网</a>| <a href="http://555346.com" target="_blank">久久青草欧美一区二区三区</a>| <a href="http://www-kj777.com" target="_blank">欧美成人日本</a>| <a href="http://xilxx.com" target="_blank">欧美午夜不卡视频</a>| <a href="http://mysuteng.com" target="_blank">国产欧美日韩专区发布</a>| <a href="http://www13256.com" target="_blank">黄色成人免费网站</a>| <a href="http://niu96.com" target="_blank">亚洲人成在线观看</a>| <a href="http://pear9.com" target="_blank">亚洲一区视频</a>| <a href="http://394141.com" target="_blank">久久全国免费视频</a>| <a href="http://seo8138.com" target="_blank">亚洲国产一区视频</a>| <a href="http://tigerpowerinc.com" target="_blank">亚洲视频999</a>| <a href="http://www48929.com" target="_blank">久久精品一本久久99精品</a>| <a href="http://www-888005.com" target="_blank">老鸭窝亚洲一区二区三区</a>| <a href="http://233116.com" target="_blank">欧美精品一区在线发布</a>| <a href="http://dehuabz.com" target="_blank">国产精品每日更新</a>| <a href="http://wwwn94.com" target="_blank">亚洲国产日韩欧美在线99 </a>| <a href="http://spvicarb.com" target="_blank">亚洲剧情一区二区</a>| <a href="http://hfztkyhfz.com" target="_blank">亚洲欧美精品中文字幕在线</a>| <a href="http://easypufu.com" target="_blank">久久久午夜视频</a>| <a href="http://y65v.com" target="_blank">欧美偷拍一区二区</a>| <a href="http://215920.com" target="_blank">一区二区三区在线免费观看</a>| <a href="http://428820.com" target="_blank">一本一本久久a久久精品牛牛影视</a>| <a href="http://4tobi.com" target="_blank">亚洲欧美日本另类</a>| <a href="http://hs045.com" target="_blank">免费不卡在线观看av</a>| <a href="http://yh5557.com" target="_blank">一本综合精品</a>| <a href="http://ju5556.com" target="_blank">美女久久一区</a>| <a href="http://1116333.com" target="_blank">国产精品一二三视频</a>| <a href="http://www01614.com" target="_blank">亚洲激情网站</a>| <a href="http://aijiashe.com" target="_blank">久久国产一区二区</a>| <a href="http://69ru.com" target="_blank">日韩午夜电影</a>| <a href="http://73cao.com" target="_blank">久久综合九色综合欧美就去吻</a>| <a href="http://36seaa.com" target="_blank">欧美亚一区二区</a>| <a href="http://avhai.com" target="_blank">亚洲国产高清aⅴ视频</a>| <a href="http://15013010203.com" target="_blank">亚洲永久在线</a>| <a href="http://china391.com" target="_blank">欧美寡妇偷汉性猛交</a>| <a href="http://nn99dd.com" target="_blank">亚洲欧美日韩一区二区在线</a>| <a href="http://012492.com" target="_blank">欧美国产成人在线</a>| <a href="http://hg98688.com" target="_blank">国产亚洲a∨片在线观看</a>| <a href="http://69ru.com" target="_blank">在线视频亚洲欧美</a>| <a href="http://605054.com" target="_blank">欧美va天堂在线</a>| <a href="http://17cao8.com" target="_blank">欧美一区二区视频免费观看</a>| <a href="http://www353488.com" target="_blank">欧美日韩精品欧美日韩精品一</a>| <a href="http://aaa211.com" target="_blank">一区在线播放视频</a>| <a href="http://www55747.com" target="_blank">欧美一级视频一区二区</a>| <a href="http://huaihuaihuai.com" target="_blank">免费在线亚洲欧美</a>| <a href="http://8xv0.com" target="_blank">欧美一站二站</a>| <a href="http://223zzz.com" target="_blank">国产精品啊v在线</a>| <a href="http://cl5555.com" target="_blank">日韩网站在线</a>| <a href="http://2015xiaomingkankan.com" target="_blank">欧美成人黄色小视频</a>| <a href="http://sclddn.com" target="_blank">性亚洲最疯狂xxxx高清</a>| <a href="http://kk1xx-com.com" target="_blank">国产精品二区影院</a>| <a href="http://avse69.com" target="_blank">一本久道久久综合婷婷鲸鱼</a>| <a href="http://lucky5888.com" target="_blank">免费亚洲一区二区</a>| <a href="http://edtxt.com" target="_blank">久久成人免费日本黄色</a>| <a href="http://119552.com" target="_blank">国产精品爽黄69</a>| <a href="http://zxxx3.com" target="_blank">午夜久久影院</a>| <a href="http://fengxinye.com" target="_blank">一区二区三区精密机械公司</a>| <a href="http://www-35777.com" target="_blank">欧美精品在线观看一区二区</a>| <a href="http://yzstbjt.com" target="_blank">亚洲国产精品视频一区</a>| <a href="http://1069024.com" target="_blank">每日更新成人在线视频</a>| <a href="http://www5909.com" target="_blank">欧美主播一区二区三区</a>| <a href="http://y87b.com" target="_blank">国产日韩1区</a>| <a href="http://3838418.com" target="_blank">欧美有码在线视频</a>| <a href="http://021-job.com" target="_blank">亚洲免费在线精品一区</a>| <a href="http://www909059.com" target="_blank">国产精品裸体一区二区三区</a>| <a href="http://739822.com" target="_blank">亚洲天堂男人</a>| <a href="http://gzhachi.com" target="_blank">在线亚洲一区</a>| <a href="http://www-236677.com" target="_blank">欧美视频在线视频</a>| <a href="http://59199m.com" target="_blank">9国产精品视频</a>| <a href="http://wu52vip.com" target="_blank">亚洲人www</a>| <a href="http://xingzhiyin85.com" target="_blank">欧美日韩免费一区</a>| <a href="http://sese912.com" target="_blank">亚洲一区二区三区久久</a>| <a href="http://ccc36-com.com" target="_blank">亚洲午夜国产成人av电影男同</a>| <a href="http://www297777.com" target="_blank">欧美日韩在线观看视频</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>