欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

系统调用回答为什么要用buffer写

发布时间:2024/9/30 windows 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 系统调用回答为什么要用buffer写 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

为什么系统调用会慢?

程序的读写是要调用内核的方法去写,产生系统调用,就必须频繁的切换用户态和内核态,切换的过程需要保存现场,清理寄存器,回复现场等,消耗cpu时间,所以慢,好的程序应该是尽量减少这种动作。

java的普通的写

有两种方式:
1.普通的io流写,

private static void testBasicFileIO() {File file = new File(path);try {FileOutputStream out = new FileOutputStream(file);while (true) {out.write(data);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}``` 2.用buffer写 ```java private static void testBufferedFileIO() {File file = new File(path);try {BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));while (true) {try {bos.write(data);} catch (IOException e) {e.printStackTrace();}}} catch (FileNotFoundException e) {e.printStackTrace();}}

跟踪系统调用

用 strace 跟踪系统调用,strace -ff -o out java java的class文件名
普通的写:

buffered写:

对比一下,普通的写10个字节就发生一次系统调用write(),buffered写8190(将近8k)才发生一次系统调用,当然是发生系统调用越少越快了。

总结

以上是生活随笔为你收集整理的系统调用回答为什么要用buffer写的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。