分别使用标准IO(fwrite)和系统IO(write)写入一百万个随机数整数到文件中,测试他们谁更快,为什么?
结论:使用标准IO比直接使用系统IO更快,原因是标准IO有缓冲区机制,在写入数据时并不是立即直接调用系统IO进行写入,而是先把缓冲区写慢后,再调用系统调用写入到文件中
而直接使用系统IO会反复地切换用户态和内核态,更加耗时,但是当我们给系统IO增加一个大的缓冲区时,它的速度要比标准IO更快
标准IO > 系统IO
系统IO+缓冲区 > 标准IO
给系统IO加一个缓冲区是最快的
void sysio(void)
{
int fd=open("test1.text",O_WRONLY|O_CREAT|O_TRUNC,0664 );
if(fd<1)
{
return -1;
}
char buff[4096];
int index=0;
for(int i=0;i<1000000;i++)
{
int num=rand();
//将生成数字写入缓冲区
memecpy(buff+index,&num,sizeof(num));
if(index>=4096)
{
write(fd,buff,index);
index=0
}
}
if(idnex>0)
{
write(fd,buff,idnex);
}
close(fd);
return 0;
}