2011-09-26 27 views
3

使用Chrome時,我注意到很多進程。據我所知,Chrome的設計需要每個插件,標籤和擴展都在自己的過程中。什麼時候使用進程,多線程或者都不使用

這是一個更有效的方法來使用多線程,如Internet Explorer,或者在一個進程如Firefox中的一切?

我覺得不同的瀏覽器是我的問題的一個很好的例子。什麼時候適合使用一個進程,而不是多線程vs什麼都不是?

回答

4

在Chrome中,這種多處理是爲了實現健壯性和安全性。如果一個進程掛起或崩潰,它對其他進程完全沒有影響(除非它是負責UI的進程)。在第三方擴展可能掛起,崩潰甚至試圖破解程序的環境中(不同的進程不共享相同的地址空間,而不是不同的線程),這是至關重要的。

使用此方法爲進程間通信增加了大量開銷。多線程時,傳遞消息不成問題,因爲所有線程共享相同的地址空間。在進程之間傳遞消息要困難得多。此外,使用進程而不是線程時,程序的總內存消耗更高。然後,程序的狀態也很難維護 - 例如,如果UI崩潰,則必須關閉所有其他進程。在主線程退出的多線程中,這不是問題。

底線 - 在大多數情況下,使用多個過程是一種矯枉過正。但是,爲了更好地分離各種任務,這可能是某些情況下的解決方案。

+0

爲插件和擴展提供單獨的進程,但是更好的錯誤處理代碼對於製表符來說是有意義的,而不是簡單地將每個製表符放在自己的進程中? –

+1

@Jason,Chrome使用製表符的原因之一是爲了避免內存泄漏 - 在IE和FF中,關閉和打開許多製表引起了泄漏,這增加了內存消耗並減緩了進程。當您在Chrome中關閉標籤時,整個過程都會關閉,不會留下任何已使用的內存痕跡。你可以說狀態記憶可以更好地管理,但是那裏是不可避免的碎片。我想,一旦他們已經想出了溝通,使用製表符的流程也比解決其他問題更容易。 – eran

+0

感謝您的回覆,但爲什麼碎片不可避免? –

相關問題