消息队列为啥这么快

存储介质

磁盘顺序读写,操作系统通过页缓存减少 IO,提高性能,所谓页缓存就是写入磁盘时先写入页缓存,写入的页标记为脏页,然后在合适的实际刷盘,这个和 redis 的 AOF 日志一样。在读的时候会进行预读,根据局部性原理当读取的时候会把相邻的磁盘块读入页缓存中。

mmap 文件内存映射 memory mapped file

页缓存属于内核空间,用户态不能访问,因此要把数据拷贝到用户空间缓冲区,而 mmap 技术可以通过内存映射文件避免拷贝,文件映射就是将内核态程序虚拟页面直接映射到用户进程的缓冲区上,这样就无需从内核态再往用户态的拷贝,而且也避免了重复数据的产生。并且也不必再通过调用 read 或 write 方法对文件进行读写,可以通过 映射地址加偏移量的方式直接操作。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计