深入理解Apache Mina(5)---- 配置Mina的 线程模型
2009-09-16 00:00:00 来源:WEB开发网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代码
<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>
- ››apache设置域名绑定 以及绑定不起作用的排查
- ››apache rewrite将指定URL转向指定的几个服务器
- ››apache配置文件httpd.comf部分参数说明
- ››Apache+Mysql+PHP+phpMyAdmin+Mac OS X 10.7 Lion...
- ››深入理解JAR包
- ››apache+tomcat负载均衡_项目实例
- ››apache mysql php 源码编译使用
- ››深入分析Volatile的实现原理
- ››深入理解Flash Player的应用程序域(Application ...
- ››深入理解flash函数(AS2)
- ››Apache添加mod_aspdotnet.so支持ASP.NET配置指南
- ››Apache中改变php.ini的路径
更多精彩
赞助商链接