Linux 预读入缓输出
Q1:如果一个只读一个字节实现文件拷贝,使用系统函数(read、write)效率高,还是使用对应的标库函数(fgetc、fputc)效率高呢?
A1:库函数;
对文件进行I/O操作,需要将数据从用户区-> 内核区 ->磁盘,从用户区到内核区需要切换 CPU的访问权级;
系统函数:
每次读取一个字节,切换权级,写入一个字节到内核区,大量时间浪费在切换访问权级上;
库函数:
有用户级缓冲区,ubuntu默认4096字节,当缓冲区满了之后,切换权级,写入内核;
缓冲区:
read、write函数常常被称为Unbuffered I/O。指的是无用户级缓冲区。但不保证不使用内核缓冲区;
Q2:从用户到内核快,还是从内核到磁盘写入数据要快?
A2:前者;
用户到内核:电子操作;
内核到磁盘:物理操作;
常用指令
strace命令:
shell中使用strace命令跟踪程序执行,查看调用的系统函数;
建议
能使用库函数,尽量使用使用库函数;
2020/07/23 14:35
@luxurylu