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