WEB开发网      婵犵數濞€濞佳囧磹婵犳艾鐤炬い鎰堕檮閸嬬喐銇勯弽銊с€掗梻鍕閺岋箑螣娓氼垱笑闂佽姘﹂褔婀佸┑鐘诧工妤犲憡绂嶉崜褏纾奸弶鍫涘妼缁楁岸鏌熷畡鐗堝殗闁诡喒鏅犲畷褰掝敃閵堝棙顔忔繝鐢靛仦閸ㄥ爼骞愰幘顔肩;闁规崘绉ぐ鎺撳亹闁绘垶锕╁Λ鍕⒑閹肩偛濡奸悗娑掓櫇缁顓兼径妯绘櫇闂佹寧绻傞弻濠囨晝閸屾稓鍘甸柣搴㈢⊕閿氶柣蹇ョ稻缁绘繃绻濋崘銊т紝闂佽鍨伴崯鏉戠暦閻旂⒈鏁傞柛鈾€鏅欑槐妯衡攽閻愬樊鍤熷┑顔藉劤铻為柛鏇ㄥ墯閸欏繘鏌嶉崫鍕櫣缂佲偓婢跺绠鹃柟瀛樼箘閿涘秵顨ラ悙顏勭伈闁诡喖缍婂畷鎯邦槻婵℃彃顭烽弻娑㈠Ω閵夈儺鍔夌紓浣稿€哥粔褰掑极閹剧粯鏅搁柨鐕傛嫹 ---闂傚倷鐒︾€笛兠洪埡鍛闁跨噦鎷�
开发学院软件开发Java 深入理解Apache Mina(5)---- 配置Mina的 线... 阅读

深入理解Apache Mina(5)---- 配置Mina的 线程模型

 2009-09-16 00:00:00 来源:WEB开发网 闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹闂傚倷绀侀幉锟犲垂閻㈠灚宕查柟鎵閸庡秵銇勯幒鎴濃偓鐢稿磻閹炬枼妲堟繛鍡楃С濞岊亞绱撻崒姘扁枌闁瑰嚖鎷�婵犵數濮幏鍐川椤撴繄鎹曢梻渚€娼уú銈吤洪妸鈺佺劦妞ゆ帊鑳堕埊鏇㈡煏閸モ晛浠х紒杈╁仱閺佹捇鏁撻敓锟�闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹  闂傚倷鑳舵灙缂佺粯顨呴埢宥夊即閵忕姵鐎梺缁樺姇閻忔氨鈧凹鍓熷娲垂椤曞懎鍓伴梺閫炲苯澧紒澶婄秺瀵濡歌閸嬫捇妫冨☉娆忔殘闂佷紮缍€娴滎剟鍩€椤掑倹鏆柛瀣躬瀹曚即寮借閺嗭箓鏌ㄩ悤鍌涘
核心提示: Java代码<span><spanstyle="font-size:small;">DefaultIoFilterChainBuilderfilterChainBuilder=acceptor.getDefaultConfig().getFilterC

Java代码

<span><span style="font-size: small;">DefaultIoFilterChainBuilder filterChainBuilder = acceptor.getDefaultConfig().getFilterChain();    
// 和CPU绑定的操作配置在过滤器的前面  
filterChainBuilder.addLast("codec", new ProtocolCodecFactory(...));    
// 添加线程池    
filterChainBuilder.addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool());      
</span></span>

因为你自己实现的ProtocolCodecFactory直接读取和转换的是二进制数据,这些数据都是由和CPU绑定的I/O Processor来读取和发送的,因此为了不影响系统的性能,也应该将数据的编解码操作绑定到I/O Processor线程中,因为在Java中创建和线程切换都是比较耗资源的,因此建议将ProtocolCodecFactory配置在 ExecutorFilter的前面。关于ProtocolCodecFactory详细讲述会在后续的文档中给出,此处就不多说了。

最后给出一个服务器线程模型完整配置的例子,该例子和KFCClient一起配置使用,详细代码在附件中,此处只给出代码的主要部分:       

Java代码 深入理解Apache Mina(5)---- 配置Mina的 线程模型

<span><span style="font-size: small;">SocketAddress address = new InetSocketAddress("localhost", 4321);  
        /*** 
         * 配置SocketAcceptor监听器的I/O Processor的线程的数量, 此处的I/O 
         * Processor的线程数量由CPU的核数决定,但Acceptor 的线程数量只有一个,也就是接收客户端连接的线程数只有一个, 
         * Acceptor的线程数量不能配置。 
         * */  
        IoAcceptor acceptor = new SocketAcceptor(Runtime.getRuntime()  
                .availableProcessors() + 1, Executors.newCachedThreadPool());  
  
        acceptor.getDefaultConfig().setThreadModel(ThreadModel.MANUAL);  
        // 配置数据的编解码器  
        acceptor.getDefaultConfig().getFilterChain().addLast("codec",  
                new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));  
  
        // 此处为你自己实现的编解码器  
        // config.getFilterChain().addLast("codec", new  
        // ProtocolCodecFactory(...));  
  
        // 为IoFilterChain添加线程池  
        acceptor.getDefaultConfig().getFilterChain().addLast("threadPool",  
                new ExecutorFilter(Executors.newCachedThreadPool()));  
        acceptor.getDefaultConfig().getFilterChain().addLast("logger",  
                new LoggingFilter());  
        // 绑定服务器端口  
        acceptor.bind(address, new KFCFoodPriceHandler());  
        System.out.println("  服务器开始在 8000 端口监听 .......");  
        // ==========================================//  
        // 此处为客户端的I/O Processor线程数的配置,你可以模仿 //  
        // IoAcceptor配置来实现 //  
        // ==========================================//  
        /*** 
         * 配置SocketConnector监听器的I/O Processor的线程的数量, 此处的I/O 
         * Processor的线程数量由CPU的核数决定,但SocketConnector 
         * 的线程数量只有一个,也就是接收客户端连接的线程数只有一个, SocketConnector的线程数量不能配置。 
         * */  
        // SocketConnector connector = new SocketConnector(Runtime.getRuntime()  
        // .availableProcessors() + 1, Executors.newCachedThreadPool());  
    }   </span></span><span><span style="font-size: small;"> </span></span> 

上一页  1 2 3 4 5 

Tags:深入 理解 Apache

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接