• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Head first in xmemcached yanf4j
 

Head first in xmemcached yanf4j

on

  • 1,848 views

memcache java client

memcache java client

Statistics

Views

Total Views
1,848
Views on SlideShare
1,848
Embed Views
0

Actions

Likes
3
Downloads
29
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Head first in xmemcached yanf4j Head first in xmemcached yanf4j Presentation Transcript

    • 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架构 的多SelectorNIOSession-SocketChannel消息传输流程 3
    • I/O models《Unix Network Programming》 Chapter 6.2 I/O Models
    • I/O modelsSocket编程,KeyWord:Socket编程, 编程,KeyWord: Read Request Decode Request Process Service Encode Reply Write Reply 5
    • I/O models BIOBIO经典代码BIO经典代码1、每个线程分配独立的堆栈空间,随着工作线程的增多,加大了JVM调度线程的负担2、工作线程的时间浪费在I/O阻塞上3、工作线程数量超过极限,降低服务器的效率 6
    • I/O models BIOClassic Service Designs 7
    • I/O modelsNIO流程NIO流程 8
    • I/O models NIO流程 NIO流程注意:1、获取key要将remove,避免就绪的key下次被触发2、注册OP_WRITE事件 vsSocketChannel.write 线程竞争 9
    • I/O modelsNIO 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 、注册事件registerkey.interestOps(key.interestOps()&~SelectionKey.OP_WRITE);key.interestOps(key.interestOps() | SelectionKey.OP_WRITE); 10
    • NIO-ReactorNIO 编程模式: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 采用异步IOJava的NIO为reactor模式提供了实现的基础机制,它的Java的 NIO为 reactor模式提供了实现的基础机制,它的Selector当发现某个channel有数据时,会通过Selector当发现某个 channel有数据时,会通过 当发现某个channelSlectorKey来告知我们,在此我们实现事件和 handler的SlectorKey来告知我们,在此我们实现事件和 handler的 来告知我们,在此我们实现事件和handler绑定。 11
    • NIO-ReactorNIO 编程模式:Reactor 编程模式:Reactor 12
    • NIO-Reactor示例代码: reactor Package示例代码: 13
    • NIO-Reactor在示例代码中Reactor所在的线程负责所有的逻辑处理。在示例代码中Reactor Reactor所在的线程负责所有的逻辑处理。Reactor.selector主要注册3个事件:OP_WRITE OP_READReactor.selector主要注册 个事件:OP_WRITE 主要注册3OP_ACCEPT, 可以用不同的线程来处理这些事件 . 可以用不同的线程来处理这些事件. dispatchAcceptEvent dispatchReadEvent dispatchWriteEvent这3个方法使用线程来完成处理(要注 意同步、线程上下文切换的开销)在访问量大的情况下,推荐使用专门的线程来分别完成OP_READ OP_ACCEPT 事件。在xmemcache中,由 OP_ACCEPT事件。在 xmemcache中,由 事件。在xmemcachereactor线程完成OP_ACCEPT事件,单独的线程处理reactor线程完成 OP_ACCEPT事件,单独的线程处理 线程完成OP_ACCEPTOP_READ事件(逻辑处理比较耗时)OP_READ事件(逻辑处理比较耗时)一个Reactor线程对应一个Selector实例,采用多一个Reactor 线程对应一个Selector Reactor线程对应一个 Selector实例,采用多selector/reactor架构能够增加吞吐率。 xmemcache中,selector/reactor架构能够增加吞吐率。 xmemcache中, 架构能够增加吞吐率。xmemcacheReactor线程数量=CPU数量Reactor线程数量 =CPU数量 线程数量=CPU 14
    • NIO-Reactorxmemcache中,用数组来维护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_WRITEREGISTER 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
    • 16NIO-ReactorNIO-ReactorNIO-ReactorNIO-ReactorNIO-ReactorNIO-ReactorNIO-ReactorNIO-Reactor
    • NIO-Reactor类图类图 17
    • Q&A 18