IO优化

1、启动进程不建议出现网络IO。

2、为了只解析启动进程中用到的数据,应选择合适的数据结构,如将ArrayMap改形成支撑随机读

写、延时解析的数据存储结构以替代SharePreference。

这儿需求留意的是,需求考虑重度用户的运用场景。

补充加油站:Linux IO知识

1、磁盘高速缓存技能

利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因而,磁盘高速缓存在逻辑上归于

磁盘,物理上则是驻留在内存中的盘块。

其内存中分为两种形式:

在内存中拓荒一个独自的存储空间作为磁速缓存,巨细固定。

把未利用的内存空间作为一个缓沖池,供请求分页体系和磁盘I/O时同享。

2、分页

存储器办理的一种技能。

能够使电脑的主存运用存储在辅助存储器中的数据。

操作体系会将辅助存储器(一般是磁盘)中的数据分区成固定巨细的区块,称为“页”(pages)。

当不需求时,将分页由主存(一般是内存)移到辅助存储器;当需求时,再将数据取回,加载主存

中。

相对于分段,分页答应存储器存储于不连续的区块以保持文件体系的整齐。

分页是磁盘和内存间传输数据块的最小单位。

3、高速缓存/缓冲器

都是介于高速设备和低速设备之间。

高速缓存寄存的是低速设备中某些数据的仿制数据,而缓冲器则可一起存储高低速设备之间的数

据。

高速缓存寄存的是高速设备经常要访问的数据。

4、linux同步IO:sync、fsync、msync、fdatasync

为什么要运用同步IO?

当数据写入文件时,内核一般先将该数据仿制到缓冲区高速缓存或页面缓存中,假如该缓冲区尚未写

满,则不会将其排入输入行列,而是等候其写满或内核需求重用该缓冲区以便寄存其他磁盘块数据时,

再将该缓冲排入输出行列,最后等候其到达队首时,才进行实际的IO操作—推迟写。

推迟写削减了磁盘读写次数,可是却降低了文件内容的更新速度,可能会形成文件更新内容的丢失。为

了保证数据共同性,则需运用同步IO。

sync

sync函数只是将所有修改过的块缓冲区排入写行列,然后就回来,它并不等候实际磁盘写操作完毕

再回来。

一般称为update的体系看护进程会周期性地(一般每隔30秒)调用sync函数。这就保证了定期冲

洗内核的块缓冲区。

fsync

fsync函数只对文件描述符filedes指定的单一文件起作用,而且等候磁盘IO写完毕后再回来。一般

运用于需求保证将修改内容当即写到磁盘的运用如数据库。

文件的数据和metadata一般寄存在硬盘的不同当地,因而fsync至少需求两次IO操作。

msync

假如当前硬盘的均匀寻道时刻是3-15ms,7200RPM硬盘的均匀旋转推迟大约为4ms,因而一次IO操作

的耗时大约为10ms。

假如运用内存映射文件的方法进行文件IO(mmap),将文件的page cache直接映射到进程的地址空

间,这时需求运用msync体系调用保证修改的内容完全同步到硬盘之上。

fdatasync

fdatasync函数类似于fsync,但它只影响文件的数据部分。而fsync还会同步更新文件的属性。

仅仅只在必要(如文件尺度需求当即同步)的情况下才会同步metadata,因而能够削减一次IO操

作。

日志文件都是追加性的,文件尺度共同在增大,如何利用好fdatasync削减日志文件的同步开支?

创立每个log文件时先写文件的最后一个page,将log文件扩展为10MB巨细,这样便能够运用

fdatasync,每写10MB只要一次同步metadata的开支。

2.10 磁盘IO与网络IO

磁盘IO(缓存IO)

规范IO,大多数文件体系默许的IO操作。

数据先从磁盘仿制到内核空间的缓冲区,然后再从内核空间中的缓冲区仿制到运用程序的缓冲区。

读操作:操作体系检查内核的缓冲区有没有需求的数据,假如已经有缓存了,那么直接从缓存中返

回;否则,从磁盘中回来,再缓存在操作体系的磁盘中。

写操作:将数据从用户空间仿制到内核空间中的缓冲区中,这时对用户来说写操作就已经完结,至

于什么时候写到磁盘中,由操作体系决定,除非显现地调用了sync同步命令。

Android性能启动优化——IO优化进阶

以上解说部分Android性能优化中的IO优化部分,除了这些还有启动优化、卡顿优化、UI优化等等技能。了解更多能够前往

传送直达↓↓↓ :www.6hu.cc/go//?target=htt…

文末

优点

在必定程度上分离了内核空间和用户空间,保护体系本身安全。

能够削减磁盘IO的读写次数,从而进步性能。

缺陷

DMA方法能够将数据直接从磁盘读到页缓存中,或者将数据从页缓存中写回到磁盘,而不能在运用程序

地址空间和磁盘之间进行数据传输,这样,数据在传输进程中需求在运用程序地址空间(用户空间)和

缓存(内核空间)中进行屡次数据拷贝操作,这带来的CPU以及内存开支是非常大的。

磁盘IO主要的延时(15000RPM硬盘为例)

机械滚动延时(均匀2ms)+ 寻址延时(2~3ms)+ 块传输延时(0.1ms左右)=> 均匀5ms

网络IO主要延时

服务器响应延时 + 带宽限制 + 网络延时 + 跳转路由延时 + 本地接收延时(一般为几十毫秒到几千毫秒, 受环境影响极大)