`
rrsy23
  • 浏览: 182575 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

apache MINA 源码级分析-[贰]

阅读更多

http://rrsy23.iteye.com/blog/422689

http://rrsy23.iteye.com/blog/422589

 

需要先看前面的2篇 才能理解在说什么!

 

通过分离业务与io处理的线程池 这样 业务的阻塞不会导致IO处理的阻塞

 

[16:24:14] INFO [org.apache.mina.transport.socket.nio.NioSocketAcceptor] - accept an client connection thread info-->NioSocketAcceptor-1 [16:24:14] INFO [org.apache.mina.filter.logging.LoggingFilter] - OPENEDThread info--> NioProcessor-1 nextFilter is class org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1 [16:24:15] INFO [org.apache.mina.example.echoserver.EchoProtocolHandler] - OPENED Thread info--> pool-3-thread-1 [16:24:15] INFO [org.apache.mina.transport.socket.nio.NioSocketAcceptor] - accept an client connection thread info-->NioSocketAcceptor-1 [16:24:15] INFO [org.apache.mina.filter.logging.LoggingFilter] - OPENEDThread info--> NioProcessor-2 nextFilter is class org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1 [16:24:16] INFO [org.apache.mina.transport.socket.nio.NioSocketAcceptor] - accept an client connection thread info-->NioSocketAcceptor-1 [16:24:16] INFO [org.apache.mina.filter.logging.LoggingFilter] - OPENEDThread info--> NioProcessor-3 nextFilter is class org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1 [16:24:17] INFO [org.apache.mina.transport.socket.nio.NioSocketAcceptor] - accept an client connection thread info-->NioSocketAcceptor-1 [16:24:17] INFO [org.apache.mina.filter.logging.LoggingFilter] - OPENEDThread info--> NioProcessor-1 nextFilter is class org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1 [16:24:35] INFO [org.apache.mina.example.echoserver.EchoProtocolHandler] - --sleeping wake up 20 seconds---

 

从日志可以看出 现在 accept  ioprocess iohandler各自自己的线程池 这样才 真的异步

 

chain.addLast("threadPool", new ExecutorFilter(Executors.newSingleThreadExecutor()));

关键所在 不加则2,3车间公用一个线程池

实践不可能单线 一般

chain.addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool()));

用什么线程池 自己实际考虑

分享到:
评论
12 楼 季铵盐 2012-06-20  
11 楼 rrsy23 2009-12-20  
不错哦 ,其实自己可以研究哈
我很少用mina只是自己简单学习哈
10 楼 wxq594808632 2009-12-20  
经过别人的提醒.明白了

引用
还有更简单的方法,可以自己定义一个协议啊,很简单的比如
数据包总长度+字符串字节长度+字符串+字节流长度+字节流数据
就可以啦,解析起来也很方便
9 楼 rrsy23 2009-12-19  
我没有传过文件!

不过我想文件也好 字符也好 在网络系统中 都是流

只是在客户端 服务器段 解析不同

你看看 有没有 StreamIoHandler 这样相关的 handler

可以试验哈 buffer考虑哈
8 楼 wxq594808632 2009-12-17  
我最近在做程序的自动更新.使用mina的时候不知道怎么既可以传送字符串.又可以传输文件.官网上我也没找到相关的例子..请教下..
7 楼 michaelxz 2009-10-13  
您好,看完你的文章我想请教个问题
2和3默认的线程大小是CPU的数量+1,这种情况下当3端(IoHandler)有一些复杂的操作时,CPU的利用率就很低了
你的意思是让2和3分别使用单独的线程池,我想请教下:
如果我们在 new NioSocketAcceptor(Runtime.getRuntime().availableProcessors()+100)
当然这里的100是个虚数,可以根据系统的负载来定
这样的话和分别使用线程池有什么差别?
还有个问题就是:以前2和3共用的线程大小是清楚的,那么我们配置了
new ExecutorFilter(Executors.newCachedThreadPool())后
那么2,3的线程池大小是怎么设定的?
6 楼 rrsy23 2009-07-13  
世界本没有相同的东西 相同是因为抽象;
所以设计之所以是设计就是不同;

没有什么对与错!

就看适合与否!

欢迎探讨交个朋友fjlyxx
5 楼 fjlyxx 2009-07-13  
rrsy23 写道
福特汽车不是简单的顺序;

他有线程池,有队列,看你怎么看了

我认为一个车间是一个线程池 产品需要转到下一车间 中间是队列


对了里面放什么..没有统一的领域是很难转的.寻找统一领域是这种流水线最难的设计.
4 楼 rrsy23 2009-07-13  
福特汽车不是简单的顺序;

他有线程池,有队列,看你怎么看了

我认为一个车间是一个线程池 产品需要转到下一车间 中间是队列

3 楼 fjlyxx 2009-07-12  
rrsy23 写道
那张图 每个人看了不一样,开始看是个顺序结构

后来看是个回调结构

在看是个 线程模型结构

目前看 是个 福特汽车的流水线


呵呵!

欢迎探讨一起进步


楼主 我怎么和你认识的顺序相反啊
是个 福特汽车的流水线-->有个字节缓冲区所以具备条件(统一领域)
是个顺序结构-->有个字节缓冲区所以具备条件(统一领域)
是个回调结构-->节缓冲协议
2 楼 rrsy23 2009-07-12  
那张图 每个人看了不一样,开始看是个顺序结构

后来看是个回调结构

在看是个 线程模型结构

目前看 是个 福特汽车的流水线


呵呵!

欢迎探讨一起进步
1 楼 fjlyxx 2009-07-10  
个人觉得MINA的那张图(处理链的那张...) 看明白了基本就了解MINA了.
chain.addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool())); 线程模型是可以替换的.

一系列的回调 Executors 这个类的回调

相关推荐

Global site tag (gtag.js) - Google Analytics