Как Zend_Log предотвращает состояние гонки во время записи сообщения журнала?
Я рассмотрел немного Zend_Log, который является модулем журнала Zend Framework, но я не видел, чтобы он использовал функцию flock, чтобы предотвратить состояние гонки, если в один и тот же файл записано несколько php-скриптов. Насколько я знаю, веб-приложение, основанное на Zend Framework, обрабатывает каждый запрос как отдельный процесс php, поэтому состояние не может быть разделено между этими процессами, поэтому необходимо поддерживать синхронизацию действий при записи файла.
Кто-нибудь знает причину почему?
1 ответ
Позвольте мне ответить на мой собственный вопрос, после проверки некоторых документов, в UNIX-подобной системе открытый файл O_APPEND является потоком и безопасным для записи в файл. Но Windows - исключение, возможно, PHP сделал какую-то оболочку для интерпретатора Windows.
Если открытый файл - PIPE или FIFO, то он отличается от чистого файла. Если размер байтов превышает размер PIPE_BUF, то он не атомарный.
Понимание одновременной записи файлов из нескольких процессов