SlideShare a Scribd company logo
Head First in Xmemcached-yanf4j



                              Nathan Liu
              http://blog.csdn.net/liu251


                                            1
内容大纲

简介
传输层实现
应用层协议
Q&A




           2
传输层实现

BIO NIO(Reactor) AIO(Proactor)
xmemcache中的使用:事件抽象
xmemcache中的使用:事件抽象
xmemcache的多Selector架构
xmemcache的多 Selector架构
            的多Selector
NIOSession-SocketChannel
消息传输流程




                                 3
I/O models




《Unix Network Programming》 Chapter 6.2 I/O Models
I/O models
Socket编程,KeyWord:
Socket编程,
      编程,KeyWord:
 Read Request
 Decode Request
 Process Service
 Encode Reply
 Write Reply



                    5
I/O models BIO
BIO经典代码
BIO经典代码




1、每个线程分配独立的堆栈空间,随着工作线程的增多,加大了
JVM调度线程的负担
2、工作线程的时间浪费在I/O阻塞上
3、工作线程数量超过极限,降低服务器的效率           6
I/O models BIO
Classic Service Designs




                          7
I/O models
NIO流程
NIO流程




                     8
I/O models
    NIO流程
    NIO流程


注意:
1、获取key要将
remove,避免就绪
的key下次被触发
2、注册
OP_WRITE事件 vs
SocketChannel.wri
te 线程竞争




                                 9
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
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
NIO-Reactor

NIO 编程模式:Reactor
    编程模式:Reactor




                    12
NIO-Reactor




示例代码: reactor Package
示例代码:


                        13
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
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
16
NIO-Reactor
NIO-Reactor
NIO-Reactor
NIO-Reactor
NIO-Reactor
NIO-Reactor
NIO-Reactor
NIO-Reactor
NIO-Reactor类图

类图




                 17
Q&A




      18

More Related Content

More from wavefly (6)

PDF
The comet technology on Jetty
wavefly
 
PDF
Jetty(version 8)核心架构解析
wavefly
 
PDF
Rpc原理与实现
wavefly
 
PDF
Google protocol buffers简析
wavefly
 
PDF
ClassLoader简析
wavefly
 
PDF
Java并发核心编程
wavefly
 
The comet technology on Jetty
wavefly
 
Jetty(version 8)核心架构解析
wavefly
 
Rpc原理与实现
wavefly
 
Google protocol buffers简析
wavefly
 
ClassLoader简析
wavefly
 
Java并发核心编程
wavefly
 

Head first in xmemcached yanf4j