Каковы все недостатки использования файлов как средство передачи между двумя процессами?

У меня есть унаследованный код, который я должен улучшить по причинам производительности. Мое приложение включает два исполняемых файла, которые должны обмениваться определенной информацией. В унаследованном коде один exe пишет в файл (имя файла передается как аргумент exe), и второй исполняемый файл сначала проверяет, существует ли такой файл; если не существует проверки снова и когда это находит его, то продолжает читать содержание файла. Таким образом, информация в переданном между этими двумя исполняемыми файлами. Путем код структурирован, второй исполняемый файл успешен на самой первой попытке.

Теперь я должен очистить этот код, и задавался вопросом, что является недостатками использования файлов как средство сообщения, а не некоторое межпроцессное взаимодействие как каналы. Действительно ли открытие и чтение являются файлом, более дорогим, чем каналы? Есть ли какие-либо другие недостатки? И то, как значительный делают Вы думаете, было бы снижением производительности.

Унаследованный код выполняется на обоих окнах и Linux.

5
задан Manny 22 May 2010 в 14:20
поделиться

2 ответа

Некоторые проблемы с использованием файлов для IPC:

  • Что происходит, когда процесс (1) записывает в файл, когда процесс (2) находит его? У вас должна быть особая логика, чтобы справиться с этим случаем.

  • Что произойдет, если процесс (1) захочет отправить другое сообщение, в то время как процесс (2) все еще читает из файла? (1) должен каким-то образом определить, что в файл нельзя записать, и ждать, пока он не станет доступным.

  • Файлы могут стать узким местом при больших объемах трафика сообщений, особенно если вы используете только один файл для IPC.

Чтобы определить, является ли файловый ввод-вывод узким местом для производительности, нам нужно больше разбираться в отправляемых вами сообщениях. Насколько они велики, как часто они отправляются и т. Д. В противном случае трудно судить, как они влияют на вашу работу, если таковые имеются.

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

На мой взгляд, если у вас нет причин использовать файлы - например, для передачи больших объемов данных - я бы предпочел традиционный механизм IPC, такой как каналы, сокеты и т. Д. Но вам придется реализовать его осторожно, чтобы убедиться, что все работает на обеих платформах.

3
ответ дан 15 December 2019 в 00:52
поделиться

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

Всегда приятно использовать настоящий механизм IPC, но если ваше приложение должно быть кроссплатформенным, это действительно ограничивает ваш выбор.

1
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: