这里面包括 IO 模型,内存映射,磁盘顺序读写,PageCache,同步异步刷盘等通用的底层知识,如果这些都统统掌握,整个这一部分就跟拼积木一样,很顺利拼起来了。
这回知道底层知识有啥用了吧?起码能让你更深入和快速理解一个由它们拼起来的上层技术。
这块就没法完全展开啦,不然就成一篇讲 rocketmq 原理的文章了,我拿出这里的一句话。
另外,RocketMQ 主要通过 MappedByteBuffer 对文件进行读写操作。其中,利用了 NIO 中的 FileChannel 模型将磁盘上的物理文件直接映射到用户态的内存地址中(这种 Mmap 的方式减少了传统 IO 将磁盘文件数据在操作系统内核地址空间的缓冲区和用户应用程序地址空间的缓冲区之间来回进行拷贝的性能开销),将对文件的操作转化为直接对内存地址进行操作,从而极大地提高了文件的读写效率(正因为需要使用内存映射机制,故 RocketMQ 的文件存储都使用定长结构来存储,方便一次将整个文件映射至内存)。
这段话如果你对零拷贝这个底层概念了解,其实整段话一秒钟就看完了,而且会觉得它是废话,就像是在凑字数一样。(当然这个我做不到哈,我对底层还没有了解很透彻,所以用了 10 秒,理解到了一个马马虎虎的程度)
见仁见智
再接下来就是见仁见智的部分啦,如果是已经有了非常多技术深入学习经验的大牛,直接根据设计文档,再对照源码即可,对大牛来说是最快的方式。
如果不是的话,可以先找一些市面上比较经典的入门书籍,或者质量高的视频教程,过一遍,然后再配合设计文档和源码,基本就能把这个技术吃透了。
学多了之后你会发现,好多底层的技术或中间件,和我们应用层一样,也是有套路的,也是拼积木拼起来的。所以今后在你想学一门新技术时,别想着学它有没有用,面试会不会考,起码你看多了之后会发现,越新技术越学越快,学到最后你会发现根本就没有新技术,一切都是在拼积木。
好了不装逼了,我是第二类人群,已经卡在设计文档那里,所以我现在去找视频看了,有推荐的可以留言区评论下。