代码之家  ›  专栏  ›  技术社区  ›  JMarsch

跨进程异步IO

  •  1
  • JMarsch  · 技术社区  · 15 年前

    全部:

    我正在写一个日志解决方案。可用的日志端点之一是文本文件。假设我想从多个进程写入该文件:我可以共享打开它,并使用命名互斥来控制对该文件的并发访问(假设所有访问都发生在同一台机器上)。但后来我开始思考异步IO。在一个进程中,我可以使用BeginWrite异步发出写操作。跨流程或跨机器问题如何?异步IO在这些情况下安全吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Jim Mischel    15 年前

    Asynchronous Disk I/O Appears as Synchronous on Windows NT, Windows 2000, and Windows XP . 在讨论中,埋藏着这样一块金块:

    在Windows NT上,任何扩展文件长度的文件写入操作都是同步的

    尽管上面说的是“WindowsNT”,但我的经验是,Windows2000、WindowsXP和Server2003也是如此。我想他们的意思是“NTFS”而不是“WindowsNT”。我还没有在Vista或Server2008上测试过它。

    文章接着提供了解决这一限制的可能办法。我想它们是有效的,但实际上还没有试过。

    我找到的最可靠的解决方案是生成一个执行同步写入的线程。有点脖子痛,没错,但很有效。

        2
  •  0
  •   JaredPar    15 年前

    我不知道你说的错是什么意思。如果您使用适当的跨进程互斥来保护对文件的访问,那么即使使用异步I/O,您在给定的时间内也只能有一个进程写入文件。这是假定在异步I/O完成之前保持互斥锁锁定。