当进程可以来来去去时,如何在 C# 中进行进程间通信?

Posted

技术标签:

【中文标题】当进程可以来来去去时,如何在 C# 中进行进程间通信?【英文标题】:How can I do a Interprocess communication in C# when process can come and go? 【发布时间】:2011-12-28 14:50:09 【问题描述】:

我有 2 个进程 WriterProc 和 ReaderProc。

WriterProc 只写,ReaderProc 只读。我可以使用命名管道进行通信,但问题是 ReaderProc 在编写器编写时可能不存在,反之亦然。

两者可以同时处于活动状态,因此可能需要在写入和读取之间进行同步。

在 c# 4 中建议的方式是什么?

【问题讨论】:

读/写什么样的数据? 所以您正在寻找某种“持久性 IPC”?在读取器和写入器之间使用文件 IMO 代理。 【参考方案1】:

Message Queuing 服务设计用于像您这样的情况。它们提供有保证的消息传递,因此如果写入器在读取器未运行时忙于写入,读取器在启动后会发现一个充满消息的队列。

【讨论】:

我们可以使用像 MappedFiles 这样较低级别的东西吗? @Rohit 使用任何较低级别的东西,您最终都会重新实现持久消息的功能,考虑到您可能会看到许多异常情况(阅读器崩溃,作家崩溃,计算机重新启动,仅举几例)。您当然可以通过内存映射文件,甚至通过常规文件进行通信。但是,为了实现有保证的交付,您需要考虑的同步问题的数量是压倒性的。【参考方案2】:

让它们成为 WCF 怎么样。

写入器 WCF 将在读取器即将读取时向读取器 WCF 发出信号以停止读取,然后在写入完成后发出信号。

【讨论】:

以上是关于当进程可以来来去去时,如何在 C# 中进行进程间通信?的主要内容,如果未能解决你的问题,请参考以下文章

在linux中进行进程分组

System v 和Posix的主要功能和定义

如何在 Ranorex 中升级 C# 编译器版本?

如何查看docker 里某个容器的的启动命令

在主线程开始运行之前捕获新的进程事件

Swoole系列4.4协程间通信Channel及WithGroup