多线程 - >多处理趋势

时间:2015-10-29 16:27:19

标签: .net multithreading architecture multiprocessing

今天可用的内存比过去多得多,我发现开发人员往往从多线程到多处理。

Multi-process Architecture argumentation from Chrome devs

  

在这个世界中,将所有内容放在一个进程中的浏览器都是真实的   对稳健性,响应性和安全性的挑战。如果一个网站   应用程序导致渲染引擎崩溃,它将采取其余的   带有它的浏览器,包括任何其他打开的网络应用程序。卷筒纸   应用程序通常必须相互竞争单个CPU时间   线程,有时会导致整个浏览器无响应   安全性也是一个问题,因为一个利用网页的网页   渲染引擎中的漏洞通常可以接管整个漏洞   计算机。

所以 多处理专业人员

  • 隔离意味着健壮性和安全性。 (我认为我们可以争论响应性,因为要做出良好的响应并不是那么难 正确的多线程和线程池管理)

缺点:

  • 内存开销
  • 更长开始时间

如果我们不在浏览器上下文中说话,我们将倾向于将任何3d方lib放在单独的进程中。因为我们无法确定此lib不会崩溃我们,挂起我们或不会不安全我们的数据。 有一些替代多进程方法,如.NET中的AppDomains概念。但是它们无法提供所需的稳健性和灵活性,因为它仅适用于托管代码,而不适用于本机代码。 我认为对于任何其他软件框架都是如此。

那么你怎么看?多进程架构至少对于3d-party libs 是合理的选择还是它是邪恶的并且是程序员懒惰的结果,他们希望简化自己的生活?

1 个答案:

答案 0 :(得分:0)

这完全取决于你写的应用程序。 想想一些计算引擎。在HPC的范围内具有多个过程通常非常昂贵并且需要认真的理由。

许多应用程序正朝着Multicore体系结构发展,因为我们的程序假设运行的硬件在时钟速度方面达到了极限,因此编程语言提供了越来越复杂的语言工件来面对未来。 (Microsoft TPLIntel TBBGCC, Matlab and many others支持卸载到Xeon Phi多核协处理器)。

当您处理许多/多核核心架构时,关键数据结构内存访问模式。如果至少这2个参数是针对他的程序正确定制的,那么你会感到惊讶。

如果不是完全禁止多进程,至少会使处理RAM fragmentationCPU Cache之类的内容变得非常具有挑战性。 在编写计算引擎时(再一次,只是一个例子),您不必担心Chrome团队必须担心的安全问题,您会担心失败点,这也会更容易处理,以及将来管理多年,同时拥有一个单一的流程。

现在:

  

那么您如何看待,至少是多流程架构   3d党的libs是合理的选择,或者它是邪恶的结果   程序员懒惰,他们想简化自己的生活吗?

这是一个线索。在提出的问题的上下文中,人们应该问的问题是:如果第三方lib失败,我的应用程序应该做什么?我怎么去处理它?回答这些问题可以让您为项目做出正确的选择。

我个人认为,不是为了失败管理,而是为了平台/语言集成挑战。假设这是一个Python/C++项目,而我的主机应用程序是C#,我宁愿避免所有的互操作/编组,只是从命令行调用进程。如果可能的话,或者是可持续的。

所有人都说,对于你的下一个项目来说,对于Chrome团队来说绝对没有必要的东西是可以的。实际上,很可能,其中很多都不会。 因此,了解原因,学习概念并选择更合适的案例。