IO多路复用和Reactor模式
原文:http://wiki.jerrypeng.me/io-multiplexing-reactor.html 1. Reactor和Preactor模式
2. Reactor模式中的主要角色2.1. ReactorReactor是IO事件的派发者。 2.2. AcceptorAcceptor接受client连接,建立对应client的Handler,并向Reactor注册此Handler。 2.3. Handler和一个client通讯的实体,按这样的过程实现业务的处理。一般在基本的Handler基础上还会有更进一步的层次划分, 用来抽象诸如decode,process和encoder这些过程。比如对Web Server而言,decode通常是HTTP请求的解析, process的过程会进一步涉及到Listner和Servlet的调用。业务逻辑的处理在Reactor模式里被分散的IO事件所打破, 所以Handler需要有适当的机制在所需的信息还不全(读到一半)的时候保存上下文,并在下一次IO事件到来的 时候(另一半可读了)能继续中断的处理。为了简化设计,Handler通常被设计成状态机,按GoF的state pattern来 实现。 3. 多线程下的Reactor一个突然闪入脑海的问题:在单核的机器上,如果除了Reactor可能阻塞在等待IO事件中以外,Handler和Acceptor都是完全 非阻塞的,那用多线程来实现Reactor模式能获得性能提升吗?(貌似不能……) 3.1. 多线程化的目的
Doug Lea的《Scalable IO in Java》中实例代码中,多线程版本的Handler还是在Reactor线程里运行,只有在读到 需要的数据了以后才会想Worker线程池里提交process的任务。个人对于这种有一个问题:如果不能一次读到全部需要 的数据,process过程该如何设计? ( TODO:争取从Jetty中找到一些答案) 3.1.1. Worker线程
4. Java中的实现Java中Reactor模式server的实现主要应用的两大块技术就是:
4.1. 多Reactor线程的实现
4.2. 应用NIO其他Feature
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |