• StandardOpenOption.SYNCStandardOpenOption.DSYNC有什么区别?
  • DSYNC会发生什么类型的数据丢失?
  • DSYNC适用于哪些用例?如果您已经决定同步文件内容,那么为什么要放弃文件元数据的同步?开销的相对差异是否可以忽略不计?
  • 最佳答案

    吉莉

    DSYNC是SYNC的子集。

    SYNC要求所有数据(由文件系统管理的文件数据和文件元数据)同步写出,而DSYNC要求仅文件数据同步写出。至于开销,我认为这是一个巨大的“取决于文件系统”。使用诸如写时复制,卷影复制,版本控制,校验和等概念查看现代文件系统……我想尝试阻塞整个写操作直到完成所有工作可能会变得很昂贵。

    数据丢失的可能性是一个更令人困惑的答案。异步文件I/O的优点是底层文件系统或磁盘实际上可以批处理或排序写操作,以避免随机I/O并以更顺序的方式构造写操作。

    很好,但是要回答您的数据丢失问题,可能是在刷新之前位于缓存中的所有挂起的写操作都有可能丢失。简而言之,很难说。

    简而言之,排序如下:

  • (无选项)-最快,可能因尚未刷新1个或多个挂起的写入而丢失文件数据和文件元。
  • DSYNC-速度较慢,等待文件数据写入并返回(稍后再保存文件的元数据)
  • SYNC-最慢,等到文件数据和文件meta都被写出并在返回之前竖起大拇指。

  • 我应该说,我假设所有这些问题都与Java 7中的新AsynchronousFileChannel有关。如果不是这种情况,我深表歉意。

    关于java - StandardOpenOption.SYNC与StandardOpenOption.DSYNC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8263995/

    10-09 05:10