缓冲区io

缓冲区是内存空间的一部分,也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,缓冲区根据其对应的。

读写文件时,如果不会开辟对文件操作的缓冲区,直接通过系统调用对磁盘进行操作(读、写等),那么每次对文件进行一次读写操作时,都需要通过读写系统调用来处理此操作,即需要执行一次系统调用,执行一次系统调用将涉及到CPU状态的切换,即从用户空间切换到内核空间,实现上下文的切换,这将损耗一定的CPU时间,频繁的磁盘访问对程序的执行效率造成很大影响。

为了减少使用系统调用的次数,提高效率,我们可以采用缓冲机制。比如我们从磁盘里取信息,可以在磁盘文件进行操作时,可以一次从文件中读出大量的数据到缓冲区中,以后对这部分的访问就不需要再使用系统调用了,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

缓冲区就是一块内存区,用在输入输出的设备和CPU之间,用来缓存数据,使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU使其能够高效率工作。

刷新条件:

cpp 复制代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <unistd.h>

int main()
{
	//库函数
	printf("hello printf\n");
	fprintf(stdout,"hello fprintf\n");
	const char* s = "hello fwrite\n";
	fwrite(s, strlen(s), 1, stdout);

	//系统调用
	const char* ss = "hello write\n";
	write(1, ss, strlen(ss));	

	return 0;
} 

代码最后加上fork创建子进程

cpp 复制代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <unistd.h>

int main()
{
	//库函数
	printf("hello printf\n");
	fprintf(stdout,"hello fprintf\n");
	const char* s = "hello fwrite\n";
	fwrite(s, strlen(s), 1, stdout);

	//系统调用
	const char* ss = "hello write\n";
	write(1, ss, strlen(ss));	

	//??
	fork();

	return 0;
} 

刷了七次

原因是因为fork时对应缓冲区的库函数的三条消息在fork执行的时候还在缓冲区里,父子进程代码共享就要各自都刷新一遍。系统调用的函数当程序进行到ss传给write时就已经传给系统了,fork时就不存在刷新问题了。而向显示器写入就不会发生刷新两次的问题,向文件写入就会刷新两次,文件在磁盘里。重定向还更改了缓冲区的刷新方式。

对于写入来讲,提供用户级缓冲区,把字符串拷贝到里面,就可以通过缓冲区的存在大大减少系统调用的次数。操作系统也有缓冲区,提供文件内核缓冲区,提高系统调用的效率,write将数据写到缓冲区里就可以立即返回了。

提高使用者的效率。

缓冲区分用户级和内核级.

相关推荐
IT_陈寒24 分钟前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
Kagol1 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉1 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau1 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生1 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼2 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范
明君879972 小时前
Flutter 如何给图片添加多行文字水印
前端·flutter
leolee182 小时前
Redux Toolkit 实战使用指南
前端·react.js·redux
bluceli2 小时前
React Hooks最佳实践:写出优雅高效的组件代码
前端·react.js
IT_陈寒2 小时前
JavaScript代码效率提升50%?这5个优化技巧你必须知道!
前端·人工智能·后端