IO/内存/文件系统-Ⅱ

tmpfs

tmpfs, 是一种基于内存的文件系统, 使用虚拟内存(VM); 可使用RAM, 也可使用swap分区.
因此它有两个优点, 一是速度快, 二是可动态分配虚拟所占空间大小, 按需变更.

Linux内核配置通常会开启tmpfs,并且mount到/dev/shm, 可通过df命令查看, 可通过mount命令变更大小, 可通过 "ls /dev/shm"根据目录下是否有文件判断是否被使用.
默认/dev/shm分区大小是物理内存的50%.

用处

  • 存放缓存, 如squid
  • 存放临时文件, 如浏览器缓存/Unix socket

注意点

  • 重启后数据丢失, 如需持久化需要自行实现

大文件读写

当文件不大的时候, 直接读进内存然后操作必然是最快的方式. 但是对于大文件来说, 会有其它的一些方式.

比如在python中, open文件后直接调用read函数会将文件整个读进内存, 如果文件接近或超过内存大小, 自然就会发生IOError了.
常用的是使用按行循环的方式, 此时是python虚拟机在内部对所用buffer进行管理. 本质上来讲应该就是按行缓冲进行输出.

with open("s1.txt", "r") as f:
    for line in f:
        print line

在Java中, 使用内存映射(Memory-Mapped Files)和RandomAccessFile, 将文件映射到进程地址, 即虚拟内存空间, 然后可以通过操作内存来进行读写.

RandomAccessFile, 本质上是把DataInputStreamDataOutputStream结合,加上移动用的seek,获得大小的length、跳过字节的skipBytes等函数结合起来, 通过mmap调用, 将文件内容按页映射为进程虚拟地址空间的一段连续的内存地址; 由于避免了在用户空间和内核空间互相拷贝数据, 速度会很快.

Huge Page

主要用于数据库方面.
待续

    原文作者:quietin
    原文地址: https://segmentfault.com/a/1190000015942533
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞