2011-09-26 58 views
3

使用Chrome时,我注意到很多进程。据我所知,Chrome的设计需要每个插件,标签和扩展都在自己的过程中。什么时候使用进程,多线程或者都不使用

这是一个更有效的方法来使用多线程,如Internet Explorer,或者在一个进程如Firefox中的一切?

我觉得不同的浏览器是我的问题的一个很好的例子。什么时候适合使用一个进程,而不是多线程vs什么都不是?

回答

4

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

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

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

+0

为插件和扩展提供单独的进程,但是更好的错误处理代码对于制表符来说是有意义的,而不是简单地将每个制表符放在自己的进程中? –

+1

@Jason,Chrome使用制表符的原因之一是为了避免内存泄漏 - 在IE和FF中,关闭和打开许多制表引起了泄漏,这增加了内存消耗并减缓了进程。当您在Chrome中关闭标签时,整个过程都会关闭,不会留下任何已使用的内存痕迹。你可以说状态记忆可以更好地管理,但是那里是不可避免的碎片。我想,一旦他们已经想出了沟通,使用制表符的流程也比解决其他问题更容易。 – eran

+0

感谢您的回复,但为什么碎片不可避免? –