Неблокирующие именованные трубы - PullRequest
7 голосов
/ 15 марта 2011

Краткое описание проблемы: мне удалось значительно ускорить просмотр изображений после загрузки, за счет использования параллелизма. Теперь мне нужно обезопасить этот параллелизм от состояния гонки. Я собирался сделать так, чтобы зависимый скрипт опрашивал обычные файлы на предмет статуса независимого, но потом решил, что именованные каналы будут лучше. Каналы, чтобы избежать опроса и именования, потому что я не могу получить PID из скрипта, который их открывает (это тот, который мне нужен, чтобы использовать каналы для общения).

Таким образом, когда изображение загружено, клиент отправляет POST через AJAX сценарию, который 1) сохраняет изображение, 2) запускает параллельный сценарий (независимый), чтобы просмотреть изображение, и 3) возвращает JSON об изображении в клиент. Затем клиент немедленно запрашивает упрощенную версию, которую, мы надеемся, у нас было достаточно для подготовки во время отправки ответа. Но если он не готов, Apache mod_rewrites указывает путь ко второму сценарию (зависимому), который ожидает завершения пролистывания, а затем возвращает данные изображения.

Я ожидал, что это будет довольно просто, но, тестируя один независимый скрипт через терминал, я получаю следующее:

$ php -f thumb.php -- img=3g1pad.jpg
successSegmentation fault

Источник здесь: http://codepad.org/JP9wkuba Я подозреваю, что получаю сегфо, потому что созданный мной fifo все еще открыт и теперь осиротел. Но мне нужно, чтобы зависимый скрипт видел, верно? И разве это не должно быть неблокирующим? Я полагаю, это потому, что остальная часть сценария может работать .... но он не может закончить? Это была бы работа для обычного файла, как я и думал в начале, за исключением того, что оба они открыты, я не хочу опрашивать. Я хочу провести опрос не более одного раза и покончить с этим. Нужно ли мне просто опрашивать и игнорировать безобразие?

1 Ответ

1 голос
/ 28 марта 2011

Вам нужно удалить созданные файлы FIFO, а затем завершить все сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...