管理多个流程:常见的策略是什么?

时间:2010-08-24 12:21:06

标签: multithreading concurrency multiprocessing com+ pooling

虽然多线程在某些情况下更快,但有时我们只想生成多个工作进程来完成工作。如果其中一个工作程序崩溃,并且用户不需要担心很多关于内部锁定的东西,这样做的好处是不会崩溃主应用程序。

COM +的Application Pooling似乎是在Windows上实现这一目标的好方法。缺点是我们需要为工作进程编写COM +包装器。

然而,当我search for Application Pooling on Google时,似乎它的大多数用法都与IIS有关。其他应用程序(例如科学/图形)是否发现产生多个工作进程很有用?

所以有几个问题:

  • 为什么COM +在IIS以外的区域不受欢迎?如果我编写一个非IIS应用程序并希望在Windows上使用进程管理,我应该使用COM +还是有更好的替代方案?

  • 跨平台的方式是什么?是否有那些图书馆给我一个“流程池”(工作流程将智能地提取工作,可以管理等)

6 个答案:

答案 0 :(得分:3)

您可能想要研究apache Web服务器如何管理进程池。从版本2.0开始,它runs natively on windows和它支持的多处理模型之一是流程池。 apache的一部分也是APR(apache可移植运行时),它处理特定于平台的问题。

答案 1 :(得分:2)

没有人可以回答为什么某些东西不受欢迎,因为可能没有人正在寻找你想要的东西。在.NET出现之后,人们从COM转移到Managed Environment,之后.NET,COM和ATL以及相关的其他技术实施起来非常痛苦,而且它们会崩溃并且也很难调试。

这就是管理环境存在的原因。

然而,从.NET 4开始,并行库为用户提供了更多的并行编程功能,而且你可以生成并控制其他过程。

对于多平台,您可以查找zvrba的答案。

答案 2 :(得分:2)

是的,其他应用程序 - 尤其是科学应用程序 - 发现生成多个进程很有用。由于很少有超级计算机运行Microsoft Windows,因此科学家通常会避免使用任何将它们与Microsoft平台相关联的计算机。与COM无关的任何内容都将帮助科学家利用其在Fortran中编写的庞大的现有代码库。

选择运行IIS的人通常已经喝醉了Microsoft Koolaid,因此他们对将自己与微软的专有平台联系起来的限制较少,这就是为什么特定于COM的术语会获得与IIS相关的大量命中。

执行所需操作的开放标准之一是消息传递接口。存在多个实现,其中一些使用Fortran在超级计算机上运行。其中一些使用更性感的语言在更便宜的计算机上运行。

请参阅http://en.wikipedia.org/wiki/Message_Passing_Interface

答案 3 :(得分:2)

主要由于两个因素,没有一个暴徒冲进COM应用程序池的大门:

  1. 与其他任何事物相比,COM在处理屁股方面很痛苦
  2. 线程可能很头疼,但管理比进程间通信更容易,更方便
  3. COM应用程序池基本上是为IIS创建的。与普通多线程相比,它有一个非常特殊的好处:多个进程完全相互隔离。在处理可疑稳定性的第三方插件时,这对于数据安全性和应用程序稳定性非常重要。

    科学计算通常不需要在操作之间实现强大的数据安全隔离,我冒昧地猜测科学计算并不太依赖于可疑稳定性的第三方插件。在进行大型数学运算时,你要么使用一个性感的数字库,最好是坚如磐石,要么认真对待,或者你正在使用自己的代码,在这种情况下应该修复崩溃,重复违规者应该打屁股。 / p>

    哦,除了堆栈溢出之外的所有崩溃都可以被捕获并在多线程应用程序中处理,特别是如果它是您自己的代码。

    简而言之,COM应用程序池对于除IIS以外的任何事情都是过度的。

答案 4 :(得分:2)

我无法对你问题的COM方面提供任何答案,但值得注意的是,还有另一个世界(除了HPC MPI)多处理(而不是更常见的多线程方法)显然还活着并蓬勃发展: Python

为什么? Python的GIL(“global interpreter lock”)严重削弱了多线程python代码的大多数尝试,以至于multiprocessing是在SMP上并行化Python的一般推荐方法。标准库包括process pools;还有各种other options

Python当然应该满足任何多平台要求!

答案 5 :(得分:0)

Google的webbrowser chrome是一款多进程架构软件。它是开源的,因此您可以查看其代码并了解如何管理流程。