SlideShare a Scribd company logo
1 of 18
Download to read offline
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

Similar to Head first in xmemcached yanf4j

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
Showinnodbstatus公开
Showinnodbstatus公开Showinnodbstatus公开
Showinnodbstatus公开longxibendi
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)FLASH开发者交流会
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)Shanda innovation institute
 
基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现mysqlops
 
tradictional DR solution vs Active-active solution
tradictional DR solution vs Active-active solutiontradictional DR solution vs Active-active solution
tradictional DR solution vs Active-active solutionChen Xin xin
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享zenyuhao
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计mysqlops
 
Oracle Security 101
Oracle Security 101Oracle Security 101
Oracle Security 101Dahui Feng
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Harvey Zhang
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysqlpwesh
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure National Cheng Kung University
 
twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 

Similar to Head first in xmemcached yanf4j (20)

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Showinnodbstatus公开
Showinnodbstatus公开Showinnodbstatus公开
Showinnodbstatus公开
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现
 
tradictional DR solution vs Active-active solution
tradictional DR solution vs Active-active solutiontradictional DR solution vs Active-active solution
tradictional DR solution vs Active-active solution
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享
 
Aswan&hump
Aswan&humpAswan&hump
Aswan&hump
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
 
Oracle Security 101
Oracle Security 101Oracle Security 101
Oracle Security 101
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
 
20 cpu04
20 cpu0420 cpu04
20 cpu04
 
twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事
 
Ali-tomcat
Ali-tomcatAli-tomcat
Ali-tomcat
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 

More from wavefly

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

More from wavefly (6)

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

Head first in xmemcached yanf4j