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
, 本质上是把DataInputStream
和DataOutputStream
结合,加上移动用的seek
,获得大小的length
、跳过字节的skipBytes
等函数结合起来, 通过mmap
调用, 将文件内容按页映射为进程虚拟地址空间的一段连续的内存地址; 由于避免了在用户空间和内核空间互相拷贝数据, 速度会很快.
Huge Page
主要用于数据库方面.
待续