何时使用进程,多线程或两者都没有

时间:2011-09-26 11:56:40

标签: multithreading design-patterns process

使用Chrome时,我注意到了很多流程。据我所知,Chrome的设计需要每个插件,标签和扩展都在自己的过程中。

这是一种更有效的方法,只是使用多线程,例如Internet Explorer,或者在一个进程中拥有所有内容,例如Firefox?

我觉得不同的浏览器是我的问题的一个很好的例子。何时适当地使用一个进程来处理所有事情与多线程相比没有什么?

1 个答案:

答案 0 :(得分:4)

在Chrome中,这种多重处理是为了实现稳健性和安全性。如果一个进程挂起或崩溃,它对其他进程完全没有影响(除非它是负责UI的进程)。这在第三方扩展可能会挂起,崩溃甚至尝试破解程序的环境中至关重要(不同的进程不共享相同的地址空间,而不是不同的线程)。

使用此方法会为进程间通信增加大量开销。多线程时,传递消息不是问题,因为所有线程共享相同的地址空间。在进程之间传递消息要困难得多。此外,当使用进程而不是线程时,程序的总内存消耗更高。然后是程序的状态也更难维护 - 例如,如果UI崩溃,必须关闭所有其他进程。这在主线程退出的多线程中不是问题。

底线 - 在大多数情况下,使用多个流程是一种过度杀伤力。但是,为了更好地分离各种任务,它可能是某些情况下的解决方案。