【发布时间】:2019-10-23 12:30:54
【问题描述】:
我正在使用读/写来读取/写入本地磁盘常规文件。
我必须读/写少量数据。例如
read(fd, buf, 15)
write(fd, buf, 39);
有人告诉我,当有人审查我的拉取请求时,我应该避免读取/写入少量数据。
他们说:比如我应该分配一个4k这样的大内存,先把小数据复制到大内存中,大内存写一次,而不是多次写小数据。 而且我也应该像4k数据一样读取一次,并将其存储到大内存中,然后我可以使用那个大内存。
但是我知道当我写小数据时,我会写入页面缓存(?)所以内核会处理内存?当它足够大时,内核会写入磁盘吗?
我理解对了吗?我应该避免读/写小数据吗?
【问题讨论】:
-
"例如,我应该分配一个像 4k 这样的大内存" --> 不,底层 I/O 系统已经在这样做了。代码清晰。关注整体代码结构和性能,而不是小问题。
-
@chux 对于像
fread()和fwrite()这样的 C 标准库函数是这样,而不是像read()和write()这样的基于 POSIX 系统调用的 I/O。 -
您有什么理由使用
read而不是fread?后者会为你做缓冲。 -
如果您正在处理的项目对 IO 性能有要求,您应该针对这些要求进行测试。只有当您的代码不符合要求时才考虑优化。如果项目没有要求,请使用最简单的代码来表达您的意图。