MMKV的核心原理是将文件MMAP到内存中,将新的key/value直接append到内存中,如果达到边界了,就重整以腾出空间,如果空间还是不够的话,就直接double内存块。MMKV只会选用最新写入的key/value作为有效值。
优点:读写效率高,因为是直接写内存,不需要进行文件读写。文件读写是由操作系统自行实现的,不会出现内容丢失。支持多进程锁。
缺点:初始化的时候会直接申请一块内存,如果用的key/value不多,就会浪费一大块内存。
-
MMKV如何支持多进程?
- 去中心化架构:将文件内容通过MMAP映射到每个访问进程的内存块中。
- 通过对写指针的更新和定位,实现内容的状态同步。
- 通过优化和升级文件锁,给内容加上进程锁,保证内容的读写同步。
MMKV的数据序列化使用的是Protocol协议,将key/value序列化成buffer(内存块)存储到内存中。
参考资料:
https://github.com/Tencent/MMKV/wiki/design
https://github.com/Tencent/MMKV/wiki/android_ipc
https://juejin.cn/post/6844903914119102472