美文网首页
非缓冲io与缓冲io

非缓冲io与缓冲io

作者: luckiexie | 来源:发表于2019-05-01 21:31 被阅读0次

系统调用

    在讲解io之前,先介绍下系统调用。系统调用是操作系统内核提供给外部访问的最小接口,运行在内核态,如果应用层需要访问cpu、内存、io等资源时,则需要访问系统调用进行一些系统操作。比如c库函数malloc需要分配内存,则需要从操作系统的用户态切换到内核态调用sbrk系统调用。系统调用需要在用户态和内核态之间来回切换,开销较大,因此,如果程序频繁进行系统调用,那么对性能的消耗可想而知。

非缓冲io

    根据《UNIX环境高级编程》一书中的解释:不带缓冲io指的是每个read和write都调用内核中的一个系统调用。可以看出,非缓冲io每次都会进行系统io,那么对于io密集型的程序,会进行频繁的系统调用,性能极低。同时,需要理解,这里的缓冲指的是应用层面上的缓冲,在操作系统这层其实是有缓冲的,读写都会经过内核缓冲区。

缓冲io

    缓冲io相对于非缓冲io,在应用层添加了缓冲区,应用程序在进行读写时,会一次性读满或者写满缓冲区,减少系统调用次数,极大提高程序性能。

相关文章

  • 非缓冲io与缓冲io

    系统调用 在讲解io之前,先介绍下系统调用。系统调用是操作系统内核提供给外部访问的最小接口,运行在内核态,如果应用...

  • 软件架构设计-操作系统

    操作系统 直接IO与缓冲IO 缓冲io又称作标准I/O,大多数文件系统的默认IO操作都是缓冲IO。在linux的缓...

  • Java NIO 和 IO 之间的主要差别

    NIO 和 IO 之间的主要差别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 ...

  • NIO学习笔记(1)

    NIO:(New IO/No blocking IO)非阻塞式IO 新特性:面向缓冲区,Channel,Selec...

  • 【JAVA】总结四

    阻塞IO和非阻塞IO 发送端往缓冲区写入数据,当发送端缓冲区数据满了,发送端write就会阻塞,接收端从接收端缓冲...

  • io缓冲

    此段代码会输出8个“*”,因为printf标准输出默认是行缓存,fork子进程会把父进程缓存区同样copy一份。缓...

  • java-nio学习之java io比较

    java io 基本介绍 java nio和io区别 面向流与面向缓冲 IO是面向流的,NIO是面向缓冲区的。 J...

  • NIO

    一、IO和NIO区别 IO是面向流的,阻塞的,单向的; NIO是面向缓冲的,非阻塞的,双向的; 二、缓冲区 2.1...

  • IO与NIO

    IO面向流,阻塞。 NIO面向块(面向缓冲区),非阻塞。

  • linux 非缓冲io笔记

    简介 在linux中,打开的的文件(可输入输出)标识就是一个int值,如下面的三个标准输入输出STDIN_FILE...

网友评论

      本文标题:非缓冲io与缓冲io

      本文链接:https://www.haomeiwen.com/subject/wlmpnqtx.html