Каковы все недостатки использования файлов в качестве средства связи между двумя процессами? - PullRequest
5 голосов
/ 22 мая 2010

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

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

Устаревший код запускается как в Windows, так и в Linux.

Ответы [ 2 ]

3 голосов
/ 22 мая 2010

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

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

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

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

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

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

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

1 голос
/ 22 мая 2010

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

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

...