writeBuffer 是预分配的anonymous pages, 并且mlock到物理内存了. 往里面写消息, 不会因为内存不足回收带来延迟.
mmap的文件page cache, 在物理内存分配过快, background reclaim速度跟不上的时候, 线程会被block住,
进行direct reclaim, 带来延迟.

可参考:
https://events.static.linuxfound.org/sites/events/files/lcjp13_moriya.pdf

祝好


2018-04-07 13:50 GMT+08:00 yuzhou li <iamzhou...@gmail.com>:

> /**
>  * Message will put to here first, and then reput to FileChannel if 
> writeBuffer is not null.
>  */
> protected ByteBuffer writeBuffer = null;
>
>
> 看MappedFile里面,有一个这样的buffer,然后查看他的用途,是消息先写到这个里面了,而每次rocketmq出现流控的时候,就是写这个buffer耗时很大的时候。。
> 所以我想问题这么设计的初衷是什么呢?直接用channel刷pageCache的话,和先写buffer,再刷channel的区别在什么地方呢?
>

Reply via email to