История:
Несколько дней назад я думал о межпроцессной коммуникации на основе обмена файлами. Скажем, процесс A создает несколько файлов во время его работы, и процесс B читает эти файлы впоследствии. Чтобы гарантировать правильность написания всех файлов, было бы удобно создать специальный файл, существование которого будет сигнализировать о том, что все операции были выполнены.Обмен файлами между процессами: эффективность и условия гонки
Простой рабочий процесс:
процесс А создает файл «FILE1.TXT»
процесс А создает файл «file2.txt»
процесс А создает файл «processA.ready»
Процесс B не ждет, пока файл появляется «processA.ready», а затем читает файлы file1 и file2.
Сомнения:
Файловые операции выполняются в операционной системе, в частности подсистемой файла. Поскольку реализации могут отличаться в Unix, Windows или MacOS, я не уверен в надежности обмена данными между процессами обмена файлами. Даже если ОС будет гарантировать эту согласованность, в Java есть такие вещи, как JIT-компилятор, который может изменять порядок команд программы.
Вопросы:
1. Существуют ли какие-либо реальные характеристики на файловых операций в операционных системах?
2. Действительно ли JIT разрешено переупорядочить инструкции программы работы с файлами для одного потока программ?
3. Является ли обмен файлами по-прежнему актуальным вариантом для межпроцессного взаимодействия в настоящее время или безоговорочно лучше выбрать TCP/HTTP/etc?
большая проблема у вас будет это кэширование дисковых операций. – user3344003
Если бы я был вами, я бы использовал HTTP. Нет необходимости синхронизировать процессы и писать какие-то прослушиватели событий. И будет легче разделить эти процессы на разные машины в будущем. – gkiko
@ gkiko на самом деле я уже сделал это :) – AdamSkywalker