首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fflush()刷新相同的数据会花费不同的时间

为什么fflush()刷新相同的数据会花费不同的时间
EN

Stack Overflow用户
提问于 2016-04-28 20:07:30
回答 2查看 365关注 0票数 0

我有一个文件描述符,我总是在其中写入两个浮点数。请注意,我总是在向文件写入任何内容之前调用rewind(),这意味着我总是写入第一行。基本上,可以将其视为在文件中维护“当前状态”。在写入fflush()之后,我也会调用它。我在我的应用程序中遇到了延迟峰值,当我检查时,我发现15000+()一般需要大约2-3微秒(是的,我有一个非常快的服务器),但在其他时间(大约6-7个“正常写刷新周期”之后),我发现所用的时间是上千倍(flush微秒)

你能告诉我在这种情况下我必须检查什么吗?如何修复/调试此问题?

EN

回答 2

Stack Overflow用户

发布于 2016-04-28 20:15:41

这取决于驱动器上还发生了什么。第一个瓶颈是当您的数据排队等待写入时,它将取决于操作系统(或其他数据源)对驱动器执行的其他操作。相关的,可能会延迟获得对数据总线的独占控制。如果是磁盘驱动器而不是SSD,那么物理写磁头移动到正确的磁道和扇区执行写入也需要时间。请注意,因为这是一个物理操作,所以需要更长的时间。

简而言之,除非你深入操作系统内部,否则不能保证所请求的低级操作发生的确切时间。

票数 1
EN

Stack Overflow用户

发布于 2016-04-28 20:18:42

fflush()不会将写缓冲区刷新到磁盘。它会将写缓冲区刷新到操作系统。操作系统可能并且很可能会使用它自己的缓冲区。将字节从一个缓冲区复制到另一个缓冲区非常快(与磁盘相比)。有时,当缓冲区已满或由于其他原因,操作系统可能会将自己的缓冲区刷新到磁盘。当数据实际写入磁盘时,您的程序必须等待更长时间。

这是对正在发生的事情的非常抽象的看法。实际上,在数据写入journal之前,真正的OS可能不会从fflush()返回。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36914198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档