2016-05-15 1 views
3

Какой тип использования предназначен для IPC, и нормально ли отправлять большие куски JSON (сотни символов) между процессами с помощью IPC? Должен ли я пытаться отправить как можно более короткое сообщение с помощью IPC или будет ли увеличение производительности при уменьшении размера сообщения не стоит усилий?Последствия для использования межпроцессной связи (IPC)

+1

Я также заинтересован в этом, я отправляю изображения в формате данных, который может иметь размер до 1 мб. –

+0

Это * чрезвычайно * зависит от ОС и технологии IPC. Общий ответ, касающийся Windows, Linux и OS X, невозможен. – zneak

ответ

4

Какой тип использования предназначен для IPC, и нормально ли отправлять большие куски JSON (сотни символов) между процессами с использованием IPC?

В его основе IPC - это то, что он говорит на жестяной банке. Это инструмент для использования, когда вам нужно передавать информацию между процессами, что бы это ни было. Тема очень широкая и технически включает выделение разделяемой памяти и выполнение связи вручную, но, учитывая тон вопроса и теги, я предполагаю, что вы говорите об объектах, предоставляемых ОС.

Wikipedia довольно хорошо обсуждает, как используется IPC, и я не думаю, что могу сделать гораздо лучше, поэтому я сосредоточусь на втором вопросе.

Должен ли я пытаться отправить как можно более маленькое сообщение с помощью IPC или будет ли увеличение производительности при уменьшении размера сообщения не стоит усилий?

Это немного пахнет микро-оптимизацией. Я не могу сказать окончательно, потому что я не отношусь к исходному коду в Microsoft и Apple, и я действительно не хочу копаться в реализации ядра Linux в IPC, но вот пара вопросов:

  1. IPC - это обычная операция, поэтому разработчики ОС могут оптимизировать ее для повышения эффективности. Есть команды инженеров, которые рассмотрели проблему и выяснили, как сделать это быстро.
  2. Узкое место в общении между процессами/потоками почти всегда синхронизируется. Задержки плохие, но условия гонки и тупики хуже. Тем не менее существует множество творческих способов, которыми разработчики ОС могут ускорить процедуру, поскольку система управляет планировщиком процессов и менеджером памяти.
  3. Существует множество способов быстрой передачи данных. Для ОС, если данные должны пересекать границы процесса, тогда есть некоторое копирование, которое может потребоваться, но ОС копирует память по всему месту все время. Подумайте об утилите командной строки, например netstat. Когда этот исполняемый файл запускается, необходимо распределить память, процесс нужно загрузить с диска, и все исправления, которые необходимо выполнить ОС, выполняются до начала процесса. Это делается так быстро, что вы почти не замечаете. В Windows netstat примерно 40k, и он загружается в память почти мгновенно. (Notepad, еще один быстрый загрузчик в 10 раз больше этого размера, но он все равно запускается в течение небольшого промежутка времени.)
  4. Большое исключение из № 2 выше, если вы говорите о IPC между процессами, которые не находятся на такой же компьютер. (Думайте, что Windows RPC). Тогда вы действительно связаны скоростью сетевого/коммуникационного стека, но в этом месте несколько килобайт или здесь не будет иметь большого значения. (Вы можете рассматривать AJAX как форму IPC, где «процессы» - это сервер и ваш браузер. Теперь рассмотрим, как быстро работают Документы Google.)

Если IPC находится между процессами в одной системе, I не думайте, что это стоит тонны усилий, избавляя вас от вашего сообщения. Сделайте сообщение легким для отладки.

В случае, если связь происходит между процессами на разных компьютерах, тогда вам, возможно, придется что-то задуматься, потратив много времени на отладку проблем, которые были бы простыми с лучшим форматом данных, несколько десятков дополнительных миллисекундное время транзита не стоит усложнять данные для анализа/отладки. Вспомните три правила оптимизации :

  1. Не делайте этого.
  2. Не ... еще. (Для экспертов)
  3. Профиль, прежде чем вы это сделаете.

Первые два правила, как правило, связано с Майклом Джексоном. (This one не this one)