More Related Content
Similar to Head first in xmemcached yanf4j (20)
Head first in xmemcached yanf4j
- 1. Head First in Xmemcached-yanf4j
Nathan Liu
http://blog.csdn.net/liu251
1
- 9. I/O models
NIO流程
NIO流程
注意:
1、获取key要将
remove,避免就绪
的key下次被触发
2、注册
OP_WRITE事件 vs
SocketChannel.wri
te 线程竞争
9
- 10. I/O models
NIO Trick and Trap
(示例代码EchoServer、EchoServer2.通过
(示例代码EchoServer EchoServer2.通过
EchoServer、
telnet 127.0.0.1 8000 测试)
8000测试)
1、获取key要将remove,避免就绪的key下
、获取key 要将remove ,避免就绪的key
key要将 remove,避免就绪的key下
次被触发
2、注册OP_WRITE事件 vs
、注册OP_WRITE
OP_WRITE事件
SocketChannel.write 线程竞争
3、注册事件register vs inerestOps
、注册事件register
key.interestOps(key.interestOps()&~SelectionKey.OP_WRITE);
key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
10
- 11. NIO-Reactor
NIO 编程模式:Reactor
编程模式:Reactor
一般地,I/O多路复用机制依赖于一个事件多路分离器
一般地,I/O
,I/O多路复用机制依赖于一个事件多路分离器
(Event Demultiplexer)。
(Event Demultiplexer)。
开发人员预先注册需要处理的事件及其事件处理器(回
调函数)
分离器对象将来自事件源的 I/O事件分离出来,并分发到
分离器对象将来自事件源的I/O I/O事件分离出来,并分发到
对应的read/write事件处理器(Event Handler)
对应的read/write事件处理器(Event
read/write事件处理器 (Event
两个与事件分离器有关的模式是 Reactor和Proactor。
两个与事件分离器有关的模式是Reactor Proactor。
Reactor和
Reactor模式采用同步IO,而Proactor采用异步IO。
Reactor模式采用同步 IO,而 Proactor采用异步 IO。
模式采用同步IO ,而Proactor 采用异步IO
Java的NIO为reactor模式提供了实现的基础机制,它的
Java的 NIO为 reactor模式提供了实现的基础机制,它的
Selector当发现某个channel有数据时,会通过
Selector当发现某个 channel有数据时,会通过
当发现某个channel
SlectorKey来告知我们,在此我们实现事件和 handler的
SlectorKey来告知我们,在此我们实现事件和 handler的
来告知我们,在此我们实现事件和handler
绑定。
11
- 14. NIO-Reactor
在示例代码中Reactor所在的线程负责所有的逻辑处理。
在示例代码中Reactor
Reactor所在的线程负责所有的逻辑处理。
Reactor.selector主要注册3个事件:OP_WRITE OP_READ
Reactor.selector主要注册 个事件:OP_WRITE
主要注册3
OP_ACCEPT, 可以用不同的线程来处理这些事件 .
可以用不同的线程来处理这些事件.
dispatchAcceptEvent
dispatchReadEvent
dispatchWriteEvent
这3个方法使用线程来完成处理(要注
意同步、线程上下文切换的开销)
在访问量大的情况下,推荐使用专门的线程来分别完成
OP_READ OP_ACCEPT 事件。在xmemcache中,由
OP_ACCEPT事件。在 xmemcache中,由
事件。在xmemcache
reactor线程完成OP_ACCEPT事件,单独的线程处理
reactor线程完成 OP_ACCEPT事件,单独的线程处理
线程完成OP_ACCEPT
OP_READ事件(逻辑处理比较耗时)
OP_READ事件(逻辑处理比较耗时)
一个Reactor线程对应一个Selector实例,采用多
一个Reactor 线程对应一个Selector
Reactor线程对应一个 Selector实例,采用多
selector/reactor架构能够增加吞吐率。 xmemcache中,
selector/reactor架构能够增加吞吐率。 xmemcache中,
架构能够增加吞吐率。xmemcache
Reactor线程数量=CPU数量
Reactor线程数量 =CPU数量
线程数量=CPU
14
- 15. NIO-Reactor
xmemcache中,用数组来维护Reactor线程组,第一个
xmemcache中,用数组来维护 Reactor线程组,第一个
中,用数组来维护Reactor
数组元素处理OP_ACCEPT | OP_CONNECT 事件。其余
数组元素处理OP_ACCEPT OP_CONNECT事件。其余
Reactor负责处理OP_WRITE OP_READ 事件,以及自定
Reactor负责处理
负责处理OP_WRITE OP_READ事件,以及自定
义的EANBLE_WRITE ENABLE_READ IDLE EXPIRED
义的EANBLE_WRITE
REGISTER UNREGISTER 事件。
UNREGISTER事件。
OP_WRITE OP_READ OP_ACCEPT事件是由
OP_ACCEPT事件是由
操作系统触发的,controller处理完后,再由
操作系统触发的,controller
controller处理完后,再由
Session处理。在处理这些事件的过程中可能会
Session处理。在处理这些事件的过程中可能会
产生ENABLE_WRITE ENABLE_READ READBLE
产生ENABLE_WRITE
WRITABLE事件。
WRITABLE事件。
Session处理xmemcache抽象的事件-
Session处理 xmemcache抽象的事件
处理xmemcache 抽象的事件-
EventType
15