繁体   English   中英

跨进程异步IO

[英]Async IO across processes

所有:

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

(假设当我调用BeginWrite()时,我传递的缓冲区包含所有应保存在一个逻辑“记录”中的内容)

在决定异步IO解决方案之前,请注意,您通常会认为异步写入最终会被同步处理。 对于您的日志记录解决方案而言,特别重要的一点是,在Windows NT,Windows 2000和Windows XP上 ,“ 异步磁盘I / O”显示为“同步”,这隐藏了一点小窍门。 在讨论中隐藏的是这个块:

“在Windows NT上,对扩展其长度的文件的任何写操作都将是同步的。”

尽管上面写着“ Windows NT”,但我的经验是Windows 2000,Windows XP和Server 2003都是如此。 我认为它们的意思是“ NTFS”而不是“ Windows NT”。 我尚未在Vista或Server 2008上对其进行测试。

本文继续为该限制提供可能的解决方案。 我认为它们可以工作,但实际上并没有尝试过。

我找到的最可靠的解决方案是生成一个执行同步写入的线程。 确实有点颈痛,但有效。

我不确定您是什么意思。 如果您使用适当的跨进程互斥量来保护对文件的访问,那么即使使用异步I / O,在给定的时间,您也只能写入1个进程。 假设您将互斥锁保持锁定状态,直到异步I / O完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM