Для тех из вас, кто заинтересован в реальной реализации многопроцессорных приложений, я написал об этом статью на своем веб-сайте: Многопроцессное приложение на C #, например, Google Chrome .
Я включил рабочий код C #. Он был протестирован для работы с .NET 2.0, .NET 3.0 и .NET 3.5.
Именованные каналы: как процессы общаются друг с другом
Поскольку ваш вопрос специально задан о Google Chrome, вы должны знать, что Chrome использует именованные каналы для связи между процессами.
В упомянутом выше исходном коде C # есть 2 файла: PipeServer.cs & PipeClient.cs. Эти 2 файла являются тонкими оболочками Windows API Named Pipes. Это хорошо проверено, потому что сотни тысяч людей используют наши продукты. Таким образом, стабильность и надежность были требованием.
Как мы используем многопроцессный дизайн
Теперь, когда у вас есть все кусочки головоломки, позвольте мне рассказать вам, как мы используем многопроцессный дизайн в нашем приложении.
Наш продукт является полным решением для обновления. То есть есть программа , которая создает патчи обновления (не относящиеся к обсуждению), отдельная программа обновления ( wyUpdate - также с открытым исходным кодом ) и элемент управления автоматического обновления , которые наши пользователи помещают в формы C # или VB.NET.
Мы используем именованные каналы для связи между автономным средством обновления (wyUpdate) и элементом управления Automatic Updater, расположенным в форме вашей программы. wyUpdate сообщает о прогрессе в Automatic Updater, и Automatic Updater может указать wyUpdate отменить прогресс, начать загрузку, начать распаковку и т. д.
На самом деле точный код именованных каналов, который мы используем, включен в статью, о которой я упоминал выше: Многопроцессное приложение на C #, такое как Google Chrome .
Почему не стоит использовать многопроцессный дизайн
Как уже упоминал Джон Скит, у вас должна быть конкретная потребность в многопроцессорной модели. В нашем случае мы хотели сохранить апдейтер полностью отдельно от вашей программы. Таким образом, если обновление каким-либо образом завершится сбоем, ваша программа останется невредимой. Мы также не хотели дублировать наш код в 2 местах.
При этом, даже с нашей хорошо проверенной оболочкой Named Pipes, межпроцессное взаимодействие затруднено. Так что действуйте осторожно.