1、I/O 概念
首先明确概念:I/O 的意思是:输入 输出,任何流程也都是输入输出。任何流也是输入输出,如内存,文件,网络 注意在linux里面大部分设备都可以称为文件,所以这里叫做文件I/O.
1.1 分散 聚集 I/O允许一次调用同时从多个缓冲区读取数据或者写入多个缓冲区。 **适用场景:**聚集多个不同的数据结构变量,完成每次的I/O事务。 和我们普通的读写文件程序不一样,分散聚集I/O称为向量 读写, 一次可以写入多个缓冲区,这个对于存入不同内存区域的缓冲区写入文件来说非常方便 函数:
writev
#include
#include
#include
#include
#include
#include
int main()
{
struct iovec iov[3];
ssize_t nr;
int fd,i;
char *buf[] ={
"钱波测试\n",
"ab测试\n",
"test\n"
};
fd =open("/test.yml",O_WRONLY|O_CREAT|O_TRUNC);
if(fd==-1)
{
perror("open");
return 1;
}
for(int i =0;i /sys/block/hda/queue/scheduler 解释: 选择cfq 调度器 -->为hda设备,当然这个一定需要root权限
3、优化I/O性能
优化I/O 性能: 1、 选择合适的调度器 2 、在应用程序的写法中,尽量自己合并写和读操作 3 、减少内存的拷贝 减少,memset memcpy操作 4 、网络流的队列尽量减少,甚至可以去除 5 、尽量理解操作系统,理解机制,周密思考 6、研究合适的I/O 选择,合并线程,合并交互 7、磁盘的I/O是最慢的,一定是先决绝瓶颈问题