2011-12-15 68 views
2

我正在处理F#中的外部DSL。语言必须允许并行循环:F#中的进程间通信

start 5 times 
    operation 

这将启动operation异步5倍,并继续执行。然而,事情有点复杂,因为operation使用线程不安全的库(无法避免这种情况),因此我想每次迭代都必须在单独的进程中启动。

假设这是围绕线程不安全问题的唯一办法,我如何启动一个进程,并通过了必须执行的执行子树(在这一点上distriminated联盟)?我想WCF命名管道,但想听听是否有其他选择(WCF意味着开始的过程中,等待回电(保持跟踪)和返回子树 - 不是非常functonal友好的代码,但也许我错了)。

此外,性能是不是在这种情况下,真正重要的。

编辑: 原来我不需要任何沟通过程开始后。我试图简单地将表达式字符串作为进程启动参数传递并让他解析/执行它。我仍然对替代品感兴趣,但我想它不会比这更简单。

+1

您可以使用同步原语(`ManualResetEvent`,`Semaphore`等)来实现线程安全?这似乎比IPC更简单。 – Daniel 2011-12-15 16:38:44

回答

0

在一个单独的AppDomain中运行的每个操作 - 如果可能的话 - 将超过IPC简单。