从我可以收集的内容中,然后在阻止设备文件上使用带有O_DIRECT
的POSIX open()
的工作方式与将FILE_FLAG_WRITE_THROUGH
和FILE_FLAG_NO_BUFFERING
与{{1}相结合的方式相同在Windows上 - 这是我正确的假设吗?
打开:
O_DIRECT 尝试最小化I / O与此文件之间的缓存效果。一般来说,这会降低性能,但它很有用 特殊情况,例如应用程序执行自己的缓存时。 文件I / O直接进出用户空间缓冲区。
Createfile:
如果使用 FILE_FLAG_WRITE_THROUGH 但 FILE_FLAG_NO_BUFFERING 还没有指定,所以系统缓存有效,然后 数据被写入系统缓存,但没有被刷新到磁盘 延迟。如果 FILE_FLAG_WRITE_THROUGH 和 FILE_FLAG_NO_BUFFERING 都是指定的,所以系统缓存没有生效,那么 数据立即刷新到磁盘而不通过Windows 系统缓存。操作系统还要求直写 硬盘的本地硬件缓存到持久性媒体。
答案 0 :(得分:3)
是的,它会在Windows系统中将这两个标志用作POSIX系统中的O_DIRECT,效果非常相似。由于它是两个不同的OS,你可以预期没有完全匹配。但除非您试图准确理解文件系统的工作方式,否则您将从这两个选项中“不要缓冲数据,并尽快将其直接写入磁盘”。
答案 1 :(得分:0)
是的,这是正确的。如果您希望在Node.js中执行此操作并需要对齐缓冲区等,则可以使用https://github.com/ronomon/direct-io