今天可用的内存比过去多得多,我发现开发人员往往从多线程到多处理。
好Multi-process Architecture argumentation from Chrome devs:
在这个世界中,将所有内容放在一个进程中的浏览器都是真实的 对稳健性,响应性和安全性的挑战。如果一个网站 应用程序导致渲染引擎崩溃,它将采取其余的 带有它的浏览器,包括任何其他打开的网络应用程序。卷筒纸 应用程序通常必须相互竞争单个CPU时间 线程,有时会导致整个浏览器无响应 安全性也是一个问题,因为一个利用网页的网页 渲染引擎中的漏洞通常可以接管整个漏洞 计算机。
所以 多处理专业人员:
缺点:
如果我们不在浏览器上下文中说话,我们将倾向于将任何3d方lib放在单独的进程中。因为我们无法确定此lib不会崩溃我们,挂起我们或不会不安全我们的数据。 有一些替代多进程方法,如.NET中的AppDomains概念。但是它们无法提供所需的稳健性和灵活性,因为它仅适用于托管代码,而不适用于本机代码。 我认为对于任何其他软件框架都是如此。
那么你怎么看?多进程架构至少对于3d-party libs 是合理的选择还是它是邪恶的并且是程序员懒惰的结果,他们希望简化自己的生活?
答案 0 :(得分:0)
这完全取决于你写的应用程序。 想想一些计算引擎。在HPC的范围内具有多个过程通常非常昂贵并且需要认真的理由。
许多应用程序正朝着Multicore体系结构发展,因为我们的程序假设运行的硬件在时钟速度方面达到了极限,因此编程语言提供了越来越复杂的语言工件来面对未来。 (Microsoft TPL,Intel TBB,GCC, Matlab and many others支持卸载到Xeon Phi多核协处理器)。
当您处理许多/多核核心架构时,关键是数据结构和内存访问模式。如果至少这2个参数是针对他的程序正确定制的,那么你会感到惊讶。
如果不是完全禁止多进程,至少会使处理RAM fragmentation,CPU Cache之类的内容变得非常具有挑战性。 在编写计算引擎时(再一次,只是一个例子),您不必担心Chrome团队必须担心的安全问题,您会担心失败点,这也会更容易处理,以及将来管理多年,同时拥有一个单一的流程。
现在:
那么您如何看待,至少是多流程架构 3d党的libs是合理的选择,或者它是邪恶的结果 程序员懒惰,他们想简化自己的生活吗?
这是一个线索。在你提出的问题的上下文中,人们应该问的问题是:如果第三方lib失败,我的应用程序应该做什么?我怎么去处理它?回答这些问题可以让您为项目做出正确的选择。
我个人认为,不是为了失败管理,而是为了平台/语言集成挑战。假设这是一个Python/C++
项目,而我的主机应用程序是C#
,我宁愿避免所有的互操作/编组,只是从命令行调用进程。如果可能的话,或者是可持续的。
所有人都说,对于你的下一个项目来说,对于Chrome团队来说绝对没有必要的东西是可以的。实际上,很可能,其中很多都不会。 因此,了解原因,学习概念并选择更合适的案例。