錛?錛夊鎴風鍙戦佷竴涓姹侫錛堥暱榪炴帴錛夛紝鍦ㄦ湇鍔″櫒绔殑涓氬姟灞傞渶瑕?0縐掍互涓婃墠鑳芥帴鏀跺埌銆?/p>
錛?錛夊鎴風鍙戦佷竴涓姹侭錛堢榪炴帴錛夛紝鍦ㄦ湇鍔″櫒绔殑涓氬姟灞傚彲浠ヨ繀閫熸帴鏀跺埌銆?/p>
浠庣幇璞″ぇ鑷寸煡閬撻棶棰樺嚭鍦ㄦ湇鍔″櫒绔殑緗戠粶鎺ユ敹灞傦紝澶ч噺閫氳繃闀胯繛鎺ュ彂閫佽繃鏉ョ殑璇鋒眰閮藉牭濉炲湪緗戠粶灞傚緱涓嶅埌澶勭悊錛堝湪緗戠粶灞傛帓闃燂紝榪樻病鍒板簲鐢ㄥ眰錛夈?/p>
錛堝弸鎯呮彁紺猴細鏈崥鏂囩珷嬈㈣繋杞澆錛屼絾璇鋒敞鏄庡嚭澶勶細hankchen錛?a href="http://www.tkk7.com/hankchen">http://www.tkk7.com/hankchen錛?/strong>
鍚庢潵緇忚繃鎺掓煡錛屽彂鐜版槸Netty涓殑OrderedMemoryAwareThreadPoolExecutor鍘熷洜銆傜浉鍏充唬鐮佸涓嬶細
MemoryAwareThreadPoolExecutor executor = new OrderedMemoryAwareThreadPoolExecutor(threadNums, maxChannelMemorySize,
maxTotalMemorySize, keepAliveTime,
TimeUnit.SECONDS);
ExecutionHandler executionHandler = new ExecutionHandler(executor);
public ChannelPipeline getPipeline() throws Exception
{
ChannelPipeline pipeline = pipeline();
pipeline.addLast("decoder", new AuthDecoder());
pipeline.addLast("encoder", new AuthEncoder());
pipeline.addLast("executor", executionHandler);
pipeline.addLast("handler", new AuthServerHandler(commandFactory));
return pipeline;
}
鍏堜粙緇嶄笅鑳屾櫙鐭ヨ瘑錛屽啀鏉ュ垎鏋愰棶棰樸?/p>
澶у閮界煡閬擄紝Netty鏄竴涓熀浜庝簨浠剁殑NIO妗嗘灦銆傚湪Netty涓紝涓鍒囩綉緇滃姩浣滈兘鏄氳繃浜嬩歡鏉ヤ紶鎾茍澶勭悊鐨勶紝渚嬪錛欳hannel璇匯丆hannel鍐欑瓑絳夈傚洖蹇嗕笅Netty鐨勬祦澶勭悊妯″瀷錛?/p>
Boss綰跨▼錛堜竴涓湇鍔″櫒绔彛瀵逛簬涓涓級---鎺ユ敹鍒板鎴風榪炴帴---鐢熸垚Channel---浜ょ粰Work綰跨▼姹狅紙澶氫釜Work綰跨▼錛夋潵澶勭悊銆?/strong>
鍏蜂綋鐨刉ork綰跨▼---璇誨畬宸叉帴鏀剁殑鏁版嵁鍒癈hannelBuffer---瑙﹀彂ChannelPipeline涓殑ChannelHandler閾炬潵澶勭悊涓氬姟閫昏緫銆?/strong>
娉ㄦ剰錛氭墽琛孋hannelHandler閾劇殑鏁翠釜榪囩▼鏄悓姝ョ殑錛屽鏋滀笟鍔¢昏緫鐨勮楁椂杈冮暱錛屼細灝嗗鑷碬ork綰跨▼闀挎椂闂磋鍗犵敤寰椾笉鍒伴噴鏀撅紝浠庤屽獎鍝嶄簡鏁翠釜鏈嶅姟鍣ㄧ殑騫跺彂澶勭悊鑳藉姏銆?/p>
鎵浠ワ紝涓轟簡鎻愰珮騫跺彂鏁幫紝涓鑸氳繃ExecutionHandler綰跨▼姹犳潵寮傛澶勭悊ChannelHandler閾撅紙worker綰跨▼鍦ㄧ粡榪嘐xecutionHandler鍚庡氨緇撴潫浜嗭紝瀹冧細琚獵hannelFactory鐨剋orker綰跨▼姹犳墍鍥炴敹錛夈傚湪Netty涓紝鍙渶瑕佸鍔犱竴琛屼唬鐮侊細
publicChannelPipeline
getPipeline() { returnChannels
.pipeline( new DatabaseGatewayProtocolEncoder(), new DatabaseGatewayProtocolDecoder(), executionHandler, // Must be shared new DatabaseQueryingHandler());
}
渚嬪錛?/pre>ExecutionHandler
executionHandler = newExecutionHandler
( newOrderedMemoryAwareThreadPoolExecutor
(16, 1048576, 1048576))
瀵逛簬ExecutionHandler闇瑕佺殑綰跨▼姹犳ā鍨嬶紝Netty鎻愪緵浜嗕袱縐嶅彲閫夛細
1錛?MemoryAwareThreadPoolExecutor 閫氳繃瀵圭嚎紼嬫睜鍐呭瓨鐨勪嬌鐢ㄦ帶鍒訛紝鍙帶鍒禘xecutor涓緟澶勭悊浠誨姟鐨勪笂闄愶紙瓚呰繃涓婇檺鏃訛紝鍚庣畫榪涙潵鐨勪換鍔″皢琚樆濉烇級錛屽茍鍙帶鍒跺崟涓狢hannel寰呭鐞嗕換鍔$殑涓婇檺錛岄槻姝㈠唴瀛樻孩鍑洪敊璇紱
2錛?OrderedMemoryAwareThreadPoolExecutor 鏄?MemoryAwareThreadPoolExecutor 鐨勫瓙綾匯傞櫎浜哅emoryAwareThreadPoolExecutor 鐨勫姛鑳戒箣澶栵紝瀹冭繕鍙互淇濊瘉鍚屼竴Channel涓鐞嗙殑浜嬩歡嫻佺殑欏哄簭鎬э紝榪欎富瑕佹槸鎺у埗浜嬩歡鍦ㄥ紓姝ュ鐞嗘ā寮忎笅鍙兘鍑虹幇鐨勯敊璇殑浜嬩歡欏哄簭錛屼絾瀹冨茍涓嶄繚璇佸悓涓Channel涓殑浜嬩歡閮藉湪涓涓嚎紼嬩腑鎵ц錛堥氬父涔熸病蹇呰錛夈?
渚嬪錛?pre>Thread X: --- Channel A (Event A1) --. .-- Channel B (Event B2) --- Channel B (Event B3) ---> \ / X / \ Thread Y: --- Channel B (Event B1) --' '-- Channel A (Event A2) --- Channel A (Event A3) --->
涓婂浘琛ㄨ揪鐨勬剰鎬濇湁鍑犱釜錛?
錛?錛夊鏁翠釜綰跨▼姹犺岃█錛屽鐞嗗悓涓涓狢hannel鐨勪簨浠訛紝蹇呴』鏄寜鐓ч『搴忔潵澶勭悊鐨勩備緥濡傦紝蹇呴』鍏堝鐞嗗畬Channel A (Event A1) 錛屽啀澶勭悊Channel A (Event A2)銆丆hannel A (Event A3)
錛?錛夊悓涓涓狢hannel鐨勫涓簨浠訛紝浼氬垎甯冨埌綰跨▼姹犵殑澶氫釜綰跨▼涓幓澶勭悊銆?
錛?錛変笉鍚孋hannel鐨勪簨浠跺彲浠ュ悓鏃跺鐞嗭紙鍒嗘媴鍒板涓嚎紼嬶級錛屼簰涓嶅獎鍝嶃?nbsp;
OrderedMemoryAwareThreadPoolExecutor 鐨勮繖縐嶄簨浠跺鐞嗘湁搴忔ф槸鏈夋剰涔夌殑錛屽洜涓洪氬父鎯呭喌涓嬶紝璇鋒眰鍙戦佺甯屾湜鏈嶅姟鍣ㄨ兘澶熸寜鐓ч『搴忓鐞嗚嚜宸辯殑璇鋒眰錛岀壒鍒槸闇瑕佸嬈℃彙鎵嬬殑搴旂敤灞傚崗璁備緥濡傦細XMPP鍗忚銆?
鐜板湪鍥炲埌鍏蜂綋涓氬姟涓婃潵錛屾垜浠繖閲岀殑璁よ瘉鏈嶅姟涔熶嬌鐢ㄤ簡OrderedMemoryAwareThreadPoolExecutor銆傝璇佹湇鍔$殑鍏朵腑涓涓幆鑺傛槸浣跨敤闀胯繛鎺ワ紝涓嶆柇澶勭悊鏉ヨ嚜鍙﹀涓涓湇鍔″櫒鐨勮璇佽姹傘傞氫俊鐨勬暟鎹寘閮藉緢灝忥紝涓鑸兘鏄?00涓瓧鑺備互鍐呫備竴鑸儏鍐典笅錛屽鐞嗚繖涓繃紼嬪緢蹇紝鎵浠ユ病鏈変粈涔堥棶棰樸備絾鏄紝鐢變簬璁よ瘉鏈嶅姟闇瑕佽皟鐢ㄧ涓夋柟鐨勬帴鍙o紝濡傛灉絎笁鏂規帴鍙e嚭鐜板歡榪燂紝灝嗗鑷磋繖涓繃紼嬪彉鎱€備竴鏃︿竴涓簨浠跺鐞嗕笉瀹岋紝鐢變簬瑕佷繚鎸佷簨浠跺鐞嗙殑鏈夊簭鎬э紝鍏朵粬浜嬩歡灝卞叏閮ㄥ牭濉炰簡錛佽岀煭榪炴帴涔嬫墍浠ユ病鏈夐棶棰橈紝鏄洜涓虹煭榪炴帴涓涓狢hannel灝變竴涓姹傛暟鎹寘錛屽鐞嗗畬Channel灝卞叧闂簡錛屾牴鏈笉瀛樺湪欏哄簭鐨勯棶棰橈紝鎵浠ュ湪涓氬姟灞傚彲浠ヨ繀閫熸敹鍒拌姹傦紝鍙槸鐢變簬鍚屾牱鐨勫師鍥狅紙絎笁鏂規帴鍙o級錛屽鐞嗘椂闂翠細姣旇緝闀褲?
鍏跺疄錛岃璇佽繃紼嬮兘鏄嫭绔嬬殑璇鋒眰鏁版嵁鍖咃紙鍗曚釜甯愬彿錛夛紝姣忎釜璇鋒眰鏁版嵁鍖呬箣闂存槸娌℃湁浠諱綍鍏崇郴鐨勶紝淇濇寔榪欐牱鐨勯『搴忔病鏈夋剰涔夛紒
鏈鍚庣殑鏀硅繘鎺柦錛?
1銆佸幓鎺塐rderedMemoryAwareThreadPoolExecutor錛屾敼鐢∕emoryAwareThreadPoolExecutor銆?
2銆佸噺灝戣皟鐢ㄧ涓夋柟鎺ュ彛鐨勮秴鏃舵椂闂達紝璁╁鐞嗙嚎紼嬪敖鏃╁洖褰掔嚎紼嬫睜銆?
錛堝弸鎯呮彁紺猴細鏈崥鏂囩珷嬈㈣繋杞澆錛屼絾璇鋒敞鏄庡嚭澶勶細hankchen錛?a href="http://www.tkk7.com/hankchen">http://www.tkk7.com/hankchen錛?/strong>