从ZooKeeper源代码看如何实现分布式系统(三)高性能的网络编程

对网络编程来说,最基本的三要素是IO, 协议(编解码),服务器端线程模型。这篇来看看ZooKeeper是如何实现高性能的网络程序。 IO模型 ZooKeeper默认提供了两种网络IO的实现,一个是Java原生的NIO,一个是基于Netty的IO。先从ServerCnxn这个抽象类看起,它表示一...

2016-01-11 17:35:42

阅读数:2854

评论数:0

Netty5源码分析(八) -- 总结

这个系列通过七篇文章,结合Netty5的原代码 1. 分析了服务器绑定端口的过程,从整体上可以看到Netty执行的流程和主要组件 2. 分析了Netty的线程模型,解析了Reactor模式。很多人都不理解这块,被EventLoop的名称和复杂的类层次所迷惑 3. 通过比较使用Java原生的N...

2014-09-23 10:34:05

阅读数:2646

评论数:0

Netty5源码分析(七) -- 异步执行Future和Promise

java.util.concurrent.Future是Java提供的接口,表示异步执行的状态,Future的get方法会判断任务是否执行完成,如果完成就返回结果,否则阻塞线程,直到任务完成。 // Java FutureTask.get() public V get() throws I...

2014-09-23 09:42:20

阅读数:6759

评论数:0

Netty5源码分析(六) -- CodeC编解码分析

Netty5的CodeC编解码对以往的版本进行了简化,没有单独的Encoder / Decoder接口,都继承了ChannelHandlerApdater类,来实现ChannelHandler接口。 对Decoder来说,主要有两个顶层的抽象类,一个是从字节流到消息的ByteToMess...

2014-09-22 17:45:59

阅读数:4323

评论数:0

Netty5源码分析(五) -- ByteBuf缓冲区

Netty的ByteBuf缓冲区实现地比Java本身的ByteBuffer更加灵活,方便。它的类结构也比较复杂,这里只说ByteBuf核心的几个要点。 1. 最重要的是要理解为什么要ByteBuf这个组件。主要还是因为基于select / poll / epoll这种IO多路复用技术的N...

2014-09-22 16:31:21

阅读数:5126

评论数:0

Netty5源码分析(四) -- 事件分发模型

所谓Netty5的事件分发模型,主要指的是ChannelPipline, ChannelHandlerContext, ChannelHandler, Unsafe ChannelHandlerInvoker这几个核心接口之间的交互模型。 首先是ChannelPipline接口,它是Netty...

2014-09-22 12:26:50

阅读数:3398

评论数:0

Netty5源码分析(三) -- Channel如何注册OP_ACCEPT, OP_READ, OP_WRITE

抛开Netty,一个典型的Java NIO服务端开发需要做几件事: 1.  创建ServerSocketChannel,设置为非阻塞,并绑定端口 2. 创建Selector对象 3. 给ServerSocketChannel注册SelectionKey.OP_ACCEPT事件 4. 启动一个线程...

2014-09-19 11:44:43

阅读数:6030

评论数:0

Netty5源码分析(二) -- 线程模型分析

线程模型是Netty的核心设计,设计地很巧妙,之前项目中有一块处理并发的设计和Netty的Eventloop单线程设计类似,效果得到了实证。 Netty5的类层次结构和之前的版本变化很大,网上也有很多文章写Netty的线程模型,Reactor模式,比如这篇http://blog.csdn.ne...

2014-09-18 18:11:02

阅读数:4956

评论数:0

Netty5源码分析(一) -- 服务器绑定过程分析

Netty5的类层次结构相比于之前版本有了很大的变化,我准备写一系列文章来分析Netty5的源码。这篇讲讲服务器绑定的过程。 一个典型的Netty5服务器端代码如下,首先需要提供两个EventLoopGroup线程池,在随后的文章中会分析Netty的线程模型,这里只需要知道两个线程池,boss...

2014-09-17 22:22:22

阅读数:4455

评论数:4

Netty的几个要点

Netty是一个传输层的框架,主要的功能就是两个:封装了NIO的操作,封装了CodeC接口,从而使得NIO的开发者只需要关注与业务功能本身的ChannelHandler。 不只是Netty,传输层主要解决的问题就是这两个,处理IO,处理CodeC CodeC主要处理的问题就是字...

2014-09-16 15:26:58

阅读数:3293

评论数:4

《Netty权威指南》私有协议开发的可运行源代码分享

之前看了《Netty权威指南》一书,第14章用整个章节介绍了如何设计和实现一个简单的私有协议,内容很好,但是作者提供的代码片段有很多错误,根本不可能正确编译。 比如MarshallingEncoder这个类是Netty提供了JBoss Marshalling的一个适配类,它的encode方法是p...

2014-09-16 14:53:17

阅读数:7050

评论数:15

深入理解非阻塞同步IO和非阻塞异步IO

这篇文章分析了Linux下的5种IO模型 http://blog.csdn.net/hguisu/article/details/7453390 很多人对阻塞 / 非阻塞, 同步 / 异步 的概念理解的不深入,搞不清楚非阻塞和异步IO的区别,笼统的认为非阻塞IO就是异步IO。其实区别很大,编...

2014-09-15 13:45:05

阅读数:16626

评论数:9

NIO的写操作分析

很多人对NIO的写操作理解的不深,不知道为什么要注册写事件,何时注册写事件,为什么写完之后要取消注册写事件。 Selector.isWriteable()方法监控的是内核的写缓冲器是否可写,所以除非内核的写缓冲区满了,否则一旦一个SocketChannel注册了写事件,每次selector都会选...

2014-09-15 12:46:07

阅读数:3572

评论数:2

提示
确定要删除当前文章?
取消 删除
关闭
关闭