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

StackOverflow https://stackoverflow.com/questions/2888410

Вопрос

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

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

Унаследованный код работает как на Windows, так и на Linux.

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top