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是最慢的,一定是先决绝瓶颈问题
