netty瞎扯几句入门 weir 2018-03-05 13:27:07.0 netty 975 Nett是什么怎么通俗的理解netty对于没接触没了解过的人来说可能会感觉高大上,如果简单地说就是对jdk的nio进一步完善优化简化不知道你是否可以理解。 其实他就是这么一个东西,上一篇的nio入门也讲过I/O多路复用还有Reactor模式,这到底是个什么玩意儿,如果你想听专业术语我就没必要给你废话了,你要是读了 相关的书籍就能理解这玩意儿那很好。 《Unix网络编程》里面提到五种IO模型我们今天就说多路复用IO,再啰嗦几句,上大学的时候还真的不知道学什么重要,当时也没想着问老师这个问题,都说基础重要那什么是基础,对不对,也许本科就学不了这么深入,等你读博士的时候可能知道IO 内存 CPU之间的联系,知道CPU里面内置的指令,知道IO的底层处理命令等等。说实话学好编程到最后拼的的还是计算机基础,你甚至都可以创一门语言。 大家有没有思考过为什么会有多路复用这个概念,为什么以前没有,是什么原因导致会想到这样来实现IO操作,就好比牛顿在苹果树下被苹果砸到头的故事。 有好多文章举例子都用去饭店吃饭服务员怎么接待顾客,我们抛开程序语言开说我们的生活,有人过来吃饭服务员是过去一直等着顾客把菜都点好了再去处理下一个顾客好,还是有顾客来了我打声招呼去忙别的,等顾客选好了菜叫服务员这时服务员过去核对一下点的菜就去后厨通知。 我想不要说我们程序员就是一个普通人都知道这个道理,那我们就追问计算机在什么时候才引入了这个模式,java又是什么时候引入这个概念的。(https://www.ibm.com/developerworks/cn/education/java/j-nio/section2.html)我现在不说netty,nio的这些底层如果你能理解透你写一个netty也不是不可能,netty不就是在nio的基础上一步一步优化的的么,给你时间你也可以做到,等你吃透了netty可能做得比netty的还好,java能和C抗衡不就是因为有了NIO么?说实话NIO的好多底层封装的都是c写的,java这个高级语言之所以个个操作系统通吃都说是JVM的功劳说白了还不是C在底层支撑着,GO语言还没研究过他的底层如果不是C那就是汇编毫无疑问大不了通过编译好的二进制代码直接操作CPU。有的时候你掌握的知识越多反而越不会了,为什么那是因为一旦知道了原理就像知道原理能不能更好,这就是人类,不然还进步干嘛? 我感觉我还没到可以谈论netty的时候,看了网上的很多很多资料netty的内存模型怎么管理的怎么分配的我还是一头雾水,我无法用通俗的语言给大家说明白我就觉得我还没有理解这就是我对技术理解的概念,如果一个不会编程的人你给他讲编程而他听不懂那不是他的问题而是你的问题,这就是我对任何知识的理解,必须挖到祖坟才罢休否则对一个事物一知半解这不是我的风格。 在网上浏览文章无意间发现jemalloc原来是FreeBSD系统的内存分配算法,而且可以用到别的linux系统做内存分配用。好吧我有点想放弃搞清楚netty的内存模型了,看看这张图: 用最通俗的语言说就是开辟一大块内存,但是这一大块内存又分成了若干个小内存,发现小内存还是有点大,在对小内存细分成相等的若干个小小内存,说起来是不是很简单。(http://www.360doc.com/content/13/0915/09/8363527_314549128.shtml) 说实话写这篇的时候我对这玩意儿根本不理解,但是我好奇的是为什么这么做,正如大师前辈所说的我们已经进入了多核时代,现在虽然量子计算机已经问世但是大众化还是太遥远,对于众多企业来说成本都是核心问题,我们要适应CPU的多核时代还要很久,怎么很好的利用CPU提供高性能的处理就成了大师们要考虑的问题了,如果能从操作系统层面实现上层应用的内存分配那就是更好了。煞费苦心的搞这么复杂目的只有一个就是花费最少的成本来完成最高效的工作,谁都喜欢,所以说谁是最可爱的人,那就是我们那些对科学对真理不懈追求的人。(http://www.tinylab.org/memory-allocation-mystery-%C2%B7-jemalloc-a/) Jemalloc 还可以优化加速nginx和redis真是个好东西,最近又发现了一系列的好文章(http://www.jianshu.com/u/dbcfb30ec5e4),说实话看完之后还是没理解我想我一个人这样去啃netty的原理性的东西看来是没有什么好结果了。会用不就行了么,确实如此你想呀大公司都用netty做底层的RPC,相信他们也知道超越netty在java领域乃至c/c++都是很困难的事情。 写到现在我没有提到任何netty源码或者实现的任何东西是因为我现在看的越多思路越模糊,或者干脆说越来越看不懂了真的是超级复杂,我这能力确实跟不上了,我想如果有个大牛跟我面对面的沟通交流也许我能稍微可以理解一点,我最近发现越来越多的底层架构都是用的netty,而且Jemalloc这个模型性能确实高,基本上是把内存用到了极致了。 我到现在还在思考netty该怎么学习学到什么程度,当我了解Jemalloc的时候我发现对自己要求太高了,其实我根本看不懂这玩意儿也就是说netty的内存分配我也是很难看懂了,既然原理性的东西都无法看懂那还学netty有什么价值,我时常会这么想问题有时候也怀疑自己没有这个金刚钻算了吧。 又过了几天,最近在看算法,但是也在想netty究竟怎么学习掌握它,是通过开源的项目看看别人怎么使用,还是啃源码啃原理???