如何实现高性能的IO及IO原理?

本文介绍了如何提高Linux服务器的IO性能,包括使用Buffer优化基本IO操作,利用mmap进行堆外内存映射减少拷贝,以及sendfile的零拷贝技术。通过这些方法,可以有效减少系统调用,提升系统效率。
摘要由CSDN通过智能技术生成

程序运行在内存以及IO的体现

  首先普及一下常识,如图所示:

  1、在整个内存空间中,跑着各种各样的程序,有Java程序、C程序,他们共用一块内存空间。

  2、对于Java程序,JVM会申请一块堆空间,通过Xmx可以设置,其余空间是堆外空间,其中每个线程有自己的线程栈,保证线程内存隔离,堆空间使用完以后,会触发Full FC,堆外空间所有进程可共享使用,无限制。

  3、所有系统运行的程序都必须通过操作系统内核进行IO操作,操作系统也是程序,也需要一定的内存空间。

一、使用Buffer代替基本IO

  我们写一个方法,此方法使用了FileWriter进行了文件的写操作,我们都知道不调用flush()可能会造成数据丢失,那么为什么呢,flush操作到底做了些什么呢?

public void fileIO() throws Exception {

    File file = new File("/Volumes/work/temp/temp.txt");
    if (file.exists()) {
        file.delete();
    }
    file.createNewFile();

    FileInputStream fileInputStream = new FileInputStream(file);
    FileWriter fileWriter = new FileWriter(file);

    fileWriter.write("hello");
    fileWriter.write("world");
    fileWriter.write("\nhello world");

    Thread.sleep(99999);
    fileWriter.flush();
    fileWriter.close();
}

  我们知道我们在写数据的时候不管是C还是Java都会有两个缓冲区,一个是操作系统的缓冲区sys buffer,还有一个是程序的缓冲区program buffer。那么刚刚的flush操作是把程序的缓冲区内容写到了系统缓冲区,还是把系统缓冲区的内容刷到了硬盘呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值