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

Multithreading 管理多个流程:常见的策略是什么?,multithreading,concurrency,multiprocessing,com+,pooling,Multithreading,Concurrency,Multiprocessing,Com+,Pooling,虽然在某些情况下多线程处理速度更快,但有时我们只是希望生成多个工作进程来完成工作。这样做的好处是,如果其中一个工作人员崩溃,则不会导致主应用程序崩溃,并且用户无需担心很多互锁问题 COM+似乎是在Windows上实现这一点的好方法。缺点是我们需要为辅助进程编写COM+包装 然而,当我看到它时,它的大多数用法似乎都与IIS有关。其他应用程序(如scientific/graphics)不觉得生成多个工作进程很有用吗 因此有几个问题: 为什么COM+在IIS以外的领域不更受欢迎?如果我编写了一个非I

虽然在某些情况下多线程处理速度更快,但有时我们只是希望生成多个工作进程来完成工作。这样做的好处是,如果其中一个工作人员崩溃,则不会导致主应用程序崩溃,并且用户无需担心很多互锁问题

COM+似乎是在Windows上实现这一点的好方法。缺点是我们需要为辅助进程编写COM+包装

然而,当我看到它时,它的大多数用法似乎都与IIS有关。其他应用程序(如scientific/graphics)不觉得生成多个工作进程很有用吗

因此有几个问题:

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

  • 跨平台的方式是什么?是否有库为我提供了一个“进程池”(工作进程将智能地拾取工作,可以管理,等等)


您可能需要研究apache web服务器如何管理进程池。从版本2.0开始,它和它支持的多处理模型之一是进程池。apache的一部分也是APR(apache portable runtime),它处理特定于平台的问题。

没有人能回答为什么有些东西不受欢迎,因为可能没有人在寻找你想要的东西。在.NET出现之后,人们从COM转向了托管环境,而在.NET出现之前,COM和ATL以及相关的其他技术的实现非常痛苦,它们会崩溃,也很难调试

正因为如此,管理环境才得以存在

然而,.NET4以后,并行库为用户提供了更强大的并行编程能力,您还可以生成和控制其他进程

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

是的,其他应用程序——特别是科学应用程序——发现生成多个进程很有用。由于很少有超级计算机运行Microsoft Windows,科学家通常避免使用任何将它们与Microsoft平台联系在一起的东西。与COM相关的任何东西都不能帮助科学家利用他们用Fortran编写的庞大的现有代码库

选择运行IIS的人通常已经喝了Microsoft Koolate,因此他们很少会将自己绑定到Microsoft的专有平台上,这就是为什么特定于COM的术语会获得与IIS相关的大量点击

做你想做的事情的开放标准之一是消息传递接口。存在几种实现,其中一些使用Fortran在超级计算机上运行。他们中的一些人使用更性感的语言在更便宜的电脑上运行


请参见

由于以下两个因素,COM应用程序池的大门并没有被一群暴徒冲进:

  • 与其他任何事情相比,COM是一个让人头疼的问题
  • 线程可能是一个令人头痛的问题,但它比进程间通信更容易管理,也更方便
  • COM应用程序池基本上是为IIS创建的。与普通多线程相比,它有一个非常特殊的好处:多个进程彼此完全隔离。在处理稳定性有问题的第三方插件时,这对于数据安全和应用程序稳定性非常重要

    科学计算通常不需要在操作之间进行强大的数据安全隔离,我敢猜测,科学计算不太依赖稳定性有问题的第三方插件。在进行大型数学运算时,您要么使用性感的数字库,最好是坚如磐石的数字库,以便认真对待;要么使用自己的代码,在这种情况下,崩溃应该得到修复,屡犯者应该被打屁股

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


    简而言之,COM应用程序池对于IIS以外的任何东西来说都是多余的。

    我无法回答您问题的COM方面,但值得注意的是,在另一个世界(除了HPC MPI),多处理(而不是更常见的多线程方法)显然是活跃的,茁壮成长:Python

    为什么??Python的GIL(“”)严重阻碍了大多数对Python代码进行多线程处理的尝试,这是通常推荐的在SMP上并行Python的方法。标准库包括:;还有各种各样的


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

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

    谢谢你让我知道.NET4的并行扩展!这显然是一件非常前卫的事情,没有多少人写过关于它的howtos等。@Kizzx2,它是非常新的,我想它是在2010年初发布的,但在MSDN文档中,微软提供了很好的见解,易于理解和实现。我曾经研究过MPI。我认为这将是运行并行程序的最终方式。不过,在我的范围内,我只想在本地计算机上运行一个“进程池”。对于我看过的所有MPI实现,它需要使用某种
    mpirun
    命令启动一个进程,并将整个应用程序建立在MPI平台之上。我想这对于我的用例来说太遥远了。其他跨平台方法是使用套接字、管道、RPC、消息队列或用于进程间通信的组合的fork或exec。关于供应商锁定applies.MPI的相同演算作为多线程解决方案往往非常糟糕。它在管理大规模并行性方面往往比gen好得多