Когда использовать процессы, многопоточность или нет - PullRequest
3 голосов
/ 26 сентября 2011

При использовании Chrome я замечаю очень много процессов.Насколько я понимаю, дизайн Chrome подразумевает, что каждый плагин, вкладка и расширение находятся в своем собственном процессе.

Является ли это более эффективным подходом к простому использованию многопоточности, например для Internet Explorer, или к объединению всего в одном процессе, напримерFirefox?

Мне кажется, что разные браузеры - хороший пример для моего вопроса.Когда целесообразно использовать процесс для всего, многопоточность против ничего?

1 Ответ

4 голосов
/ 26 сентября 2011

В Chrome эта мультиобработка выполняется для обеспечения надежности и безопасности. Если один процесс зависает или завершается сбоем, он абсолютно не влияет на другие процессы (если только этот процесс не отвечает за пользовательский интерфейс). Это очень важно в среде, где сторонние расширения могут зависать, аварийно завершать работу или даже пытаться взломать вашу программу (разные процессы не используют одно и то же адресное пространство, в отличие от разных потоков).

Использование этого подхода добавляет значительные накладные расходы для межпроцессного взаимодействия. При многопоточности передача сообщений не является проблемой, поскольку все потоки имеют одинаковое адресное пространство. Передача сообщений между процессами намного сложнее. Также общее потребление памяти программой выше при использовании процессов вместо потоков. Кроме того, существует состояние программы, которое также сложнее поддерживать - например, в случае сбоя пользовательского интерфейса все остальные процессы должны быть закрыты. Это не проблема в многопоточности, где завершается основной поток.

Итог - в большинстве случаев использование нескольких процессов является излишним. Однако для лучшего разделения различных задач в некоторых случаях это может быть решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...