Краткое изложение проблемы: мне удалось значительно ускорить просмотр изображений при загрузке по сравнению с тем, что было раньше, за счет использования параллелизма. Теперь мне нужно защитить этот параллелизм от состояния гонки. Я собирался, чтобы зависимый скрипт опрашивал обычные файлы на предмет статуса независимого, но потом решил, что именованные каналы будут лучше. Каналы, чтобы избежать опроса и именованные, потому что я не могу получить PID из сценария, который их открывает (это тот, с которым мне нужно использовать каналы для общения).
Поэтому, когда изображение загружается, клиент отправляет POST через AJAX в скрипт, который 1) сохраняет изображение 2) порождает параллельный скрипт (независимый) для просмотра изображения и 3) возвращает JSON об изображении клиенту. Затем клиент немедленно запрашивает отсканированную версию, которую мы, надеюсь, успели подготовить во время отправки ответа. Но если он не готов, Apache mod_переписывает путь так, чтобы он указывал на второй скрипт (зависимый), который ожидает завершения просмотра, а затем возвращает данные изображения.
Я ожидал, что это будет довольно просто, но, тестируя независимый скрипт через терминал, я получаю следующее:
$ php -f thumb.php -- img=3g1pad.jpg
successSegmentation fault
Источник находится здесь: http://codepad.org/JP9wkuba Я подозреваю, что получаю segfault, потому что этот fifo я made все еще открыт и теперь осиротел. Но мне нужно, чтобы его увидел зависимый скрипт, верно? И разве он не должен быть неблокирующим? Я полагаю, это потому, что остальная часть скрипта может работать.... но не может завершиться? Это будет работа для обычного файла, как я думал в начале, за исключением того, что если оба открыты, я не хочу проводить опрос. Я хочу провести опрос максимум один раз и покончить с этим. Мне просто нужно опросить и игнорировать уродство?