У меня есть унаследованный код, который я должен улучшить по причинам производительности. Мое приложение включает два исполняемых файла, которые должны обмениваться определенной информацией. В унаследованном коде один exe пишет в файл (имя файла передается как аргумент exe), и второй исполняемый файл сначала проверяет, существует ли такой файл; если не существует проверки снова и когда это находит его, то продолжает читать содержание файла. Таким образом, информация в переданном между этими двумя исполняемыми файлами. Путем код структурирован, второй исполняемый файл успешен на самой первой попытке.
Теперь я должен очистить этот код, и задавался вопросом, что является недостатками использования файлов как средство сообщения, а не некоторое межпроцессное взаимодействие как каналы. Действительно ли открытие и чтение являются файлом, более дорогим, чем каналы? Есть ли какие-либо другие недостатки? И то, как значительный делают Вы думаете, было бы снижением производительности.
Унаследованный код выполняется на обоих окнах и Linux.
Некоторые проблемы с использованием файлов для IPC:
Что происходит, когда процесс (1) записывает в файл, когда процесс (2) находит его? У вас должна быть особая логика, чтобы справиться с этим случаем.
Что произойдет, если процесс (1) захочет отправить другое сообщение, в то время как процесс (2) все еще читает из файла? (1) должен каким-то образом определить, что в файл нельзя записать, и ждать, пока он не станет доступным.
Файлы могут стать узким местом при больших объемах трафика сообщений, особенно если вы используете только один файл для IPC.
Чтобы определить, является ли файловый ввод-вывод узким местом для производительности, нам нужно больше разбираться в отправляемых вами сообщениях. Насколько они велики, как часто они отправляются и т. Д. В противном случае трудно судить, как они влияют на вашу работу, если таковые имеются.
Тем не менее, в прошлом я использовал файлы для передачи информации между процессами, хотя обычно каждый раз будут создаваться новые имена файлов, либо файлы будут использоваться для передачи больших объемов данных, а меньшее сообщение IPC будет использоваться для сигнализации когда файл будет готов.
На мой взгляд, если у вас нет причин использовать файлы - например, для передачи больших объемов данных - я бы предпочел традиционный механизм IPC, такой как каналы, сокеты и т. Д. Но вам придется реализовать его осторожно, чтобы убедиться, что все работает на обеих платформах.
Одной из проблем, с которыми я часто сталкивался, является синхронизация доступа к файлу, например если первый процесс все еще пишет, когда второй файл пытается прочитать, или наоборот. В зависимости от ваших требований это может привести ко всем видам плохого поведения.
Всегда приятно использовать настоящий механизм IPC, но если ваше приложение должно быть кроссплатформенным, это действительно ограничивает ваш выбор.