Golang 中的 bufio 包详解(一):带缓冲和不带缓冲的 IO 操作

news/2024/11/25 3:09:02/

之前的几篇文章详细介绍了 io 包,io 包为 IO 原语(I/O primitives)提供了基本的操作接口。接下来要讲解的 bufio 包相比 io 包提供了带缓冲的 io 操作,首先讲解下带缓冲与不带缓冲的区别和联系。

如何理解不带缓冲 I/O ?

不带缓冲的 I/O 操作是指应用程序直接调用操作系统的系统调用函数来完成,而不是先将数据放入一个缓冲区,然后从缓冲区中读写数据。语言本身提供的不带缓冲的 I/O 操作是指进程不提供缓冲功能(但内核还是提供缓冲的,系统内核对磁盘的读写都会提供一个块缓冲,写数据时,先将数据写入到块缓冲排队,当块缓冲达到一定量时,再把数据写入到磁盘)。

Golang标准库中的 io 包提供的是不带缓冲的读写操作,每次操作都会进行系统调用。

如何理解带缓冲 I/O?

带缓冲的 I/O 是指进程在进行 I/O 操作时提供了一个缓冲区,数据会先被读取到一个缓冲区中,当达到一定条件,比如流缓冲区满了或刷新缓冲区时,再从缓冲区中读取或写入,才会产生系统调用。

Golang 标准库中的 bufio 包提供了带缓冲的读写操作函数,在读写文件或网络数据时,可以使用 bufio 包来提高效率。例如,从一个大文件中读取数据时,可以使用 bufio.Reader 来每次读取一些数据到缓冲区中,然后从缓冲区中读取数据,避免每次读取都进行系统调用,提高效率。同样地,当需要将大量数据写入文件或网络时,可以使用 bufio.Writer 来每次将数据先写入缓冲区,然后再一次性将缓冲区中的数据写入文件中。

带缓冲 I/O 相比不带缓冲 I/O 的优势

带缓冲 I/O 可以减少系统调用的次数,提高执行效率。内核与外围设备的数据交换,内核与用户空间的数据交换都是比较费时的,使用缓冲区大大优化了这些费时的操作。

小结

本文介绍了带缓冲和不带缓冲的 IO 操作,可以看出带缓冲的 I/O 提供了一个缓冲区,数据会先被读取到一个缓冲区中,当达到一定条件,再从缓冲区中读取或写入,才会产生系统调用。相对于不带缓冲的 I/O 操作,减少了系统调用的次数,提高了执行效率。接下来的几篇文章会详细讲解 bufio 包相关的知识。


http://www.ppmy.cn/news/489720.html

相关文章

GWAS:表型的标准化(the normalization of phenotype)

GWAS表型的标准化方法一般有Quantile normalization、Inverse rank normalization、Z-score normalization等。 各自区别如下: 一、Quantile normalization 该方法将每个样本中表型值进行排序,然后将其规范化到一个标准分布,通常是正态分布…

哈工大计算机网络课程网络层协议之:网络层服务概述

哈工大计算机网络课程网络层协议之:网络层服务概述 文章目录 哈工大计算机网络课程网络层协议之:网络层服务概述网络层概述网络层核心功能—转发与路由网络层核心功能—连接建立网络层服务模型虚电路网络与数据报网络虚电路网络虚电路(VC)的具体实现VC转…

SpringBoot:快速构建高效Web应用程序的利器!

SpringBoot的设计思想和装配原理 SpringBoot是针对Spring框架的一种快速应用程序开发框架,其设计思想和装配原理都值得我们深入学习和理解。 设计思想 SpringBoot框架的设计思想可以概括为以下几点: 约定优于配置:SpringBoot提供了默认的…

信号与系统-傅里叶级数

导引 傅里叶级数是用来求解热传导方程提出来的,热传导方程 f ( x , t ) f(x,t) f(x,t)满足以下偏微分方程 { ∂ f ∂ t K ∂ 2 f ∂ x 2 f ( x , 0 ) f ( x ) \left \{ \begin{array}{c} \frac{\partial f}{\partial t} K \frac{\partial ^2f}{\partial x^2}\\ f…

OCR技术

目录 一、智能文字识别一般包含以下几个过程 二、物理版面版面分析 物理版面版面分析是OCR系统中的一个重要步骤,它可以将文档中的文字、图片等元素分离出来,为后续的字符切割和识别提供依据。物理版面版面分析通常包括以下步骤: 三、逻辑…

5. 第五部分:高级浏览器特性和APIs

5.1 DOM操作和事件处理 DOM操作(Document Object Model)是一种用于访问和操作HTML和XML文档的编程接口。通过DOM操作,您可以使用脚本语言(如JavaScript)动态地改变网页的内容、结构和样式。 以下是一些常见的DOM操作…

电脑外接显示器 串流 副屏 无线外接显示器 spacedesk

电脑外接显示器 串流 副屏 无线外接显示器 spacedesk https://www.spacedesk.net/zh/#download win7及以上 spacedesk 无线远程显示 玩游戏 moonlight和steamlink moonlight需要N卡 x650以上

LCD 硬件原理(TN,STN,TFT之间的差别)

LCD 是 Liquid Crystal Display 的简称,即液晶显示器,依据驱动方式可分为静态驱动、简单矩阵驱动以及主动矩阵驱动 3 种。其中,简单矩阵型又可再细分扭转向列型(TN)和超扭转式向列型(STN)两种&a…