美文网首页
Netty源码阅读(序)

Netty源码阅读(序)

作者: 漂泊的胡萝卜 | 来源:发表于2018-06-30 17:29 被阅读0次

    参加的阿里中间件性能挑战赛用到了Netty,就决定利用这个机会,读一读Netty的源码。首先,我认为阅读源码大致有2个主要目的,1.了解Netty的内部机制,更好的使用Netty;2.学习Netty的实现,比如池化的ByteBuf、以及EventLoop的责任链模式,我认为都有很多值得借鉴,可以用在工作中的技巧和思想;3.可以看一看比较复杂的框架代码的组织结构、代码风格,并做一些思考🤔。

    阅读源码之前,首先要有一个大局观,就是Netty解决了什么问题,有什么优点,主要有哪些模块组成?

    另外,我认为带着问题去阅读,才能够带来更多的收获。所以,我想在这次阅读源码的过程中,能够回答以下这些问题:

    1. Netty有哪些主要组成部分?

        Channel、ChannelPipeline、ChannelHandler、Eventloop、ChannelFuture、Bootstrap等。

    2. Netty如何对Java NIO进行的封装?

        Netty的Channel借助门面模式,(1)封装了和网络相关的操作,提供了统一的视图(对于ServerSocketChannel和SocketChannel),其底层IO操作是由UnSafe接口实现的,而Channel的骨骼类AbstractChannel只是调用了ChannelPipeline的相应方法让事件在责任链上传递依次处理,ChannelPipeline上的HeadContext调用UnSafe的方法执行实际的IO操作;(2)封装了对Channel接口的配置参数操作(3)维护了Channel的状态(readable,writable,open,active等)(4)Channel接口还聚合了ChannelPipeline接口,而ChannelPipeline用于处理所有的IO事件。

    3. Netty如何利用无锁化做到的高性能?

    4. netty如何监控内存泄漏?

    5. netty如何实现的buffer池?

    6. netty在代码设计方面值得学习的地方?

    最后,给出一些我初次阅读较大项目源码的一些思考:

    1. 先了解整体框架,再去找感兴趣的部分去读;

    2.带着问题去读;

    3.阅读Netty源码是一个学习并发编程,网络编程极好的方式。

    Netty中的设计模式:

        观察者模式:Future,Listener

        责任链模式:ChannelPipeline

        门面模式:Channel统一封装了网络操作。

        适配器模式:ChannelInboundHandlerAdapter

        装饰器模式:SimpleLeakAwareByteBuf

    io.netty.util.concurrent.SingleThreadEventExecutor#wakeup  什么作用?

    Netty中的死锁问题?

    相关文章

      网友评论

          本文标题:Netty源码阅读(序)

          本文链接:https://www.haomeiwen.com/subject/ihruyftx.html