Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: file_put_contens вместе с LOCK_EX - как работает блокировка фалов? / 2 сообщений из 2, страница 1 из 1
18.02.2021, 02:43
    #40046494
_Промешан_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: file_put_contens вместе с LOCK_EX - как работает блокировка фалов?
Привет.

Пользуюсь PHP 5.7 - 7.2.
Под rhel 7.2 - 7.4

Может кто-то рассказать как работает блокировка файла при одновременной записи?

Кейс: два, десять, сто юзеров лезут на сайт и приложение пишет лог файл - всё в один с LOCK_EX .

Суть вопроса : Как именно работает блокировка:

1. Какой то из тредов отвалится, потому что встретит блокировку?
2. Все ли 100 тредов в итоге получат доступ к файлу?
3. Если все - то как организуется доступ - это очередь или есть шанс что какойто тред зависнет и никогда не получит доступ?

PS: подскажите так же материалы, где про это почитать. Спасибо.
...
Рейтинг: 0 / 0
18.02.2021, 19:37
    #40046857
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: file_put_contens вместе с LOCK_EX - как работает блокировка фалов?
Почитать - официальное руководство.
https://www.php.net/manual/ru/function.file-put-contents.php
https://www.php.net/manual/ru/function.flock.php

Хотите более тонкое управление блокировкой и ходом выполнения скрипта - используйте flock(), там есть вариант с ожиданием снятия блокировки и вариант без ожидания.

Сама по себе блокировка не влияет на "отвал", который, скорее, может произойти на уровне вебсервера по таймауту ожидания ответа от скрипта, пока разгребается очередь. Или можно получить отказ вебсервера в приеме нового подключения, т.к. лимиты выбраны, а скрипты в большом количестве висят на ожидании снятия блокировки.

PS: по мне так было бы более правильным, чтоб не создавать лишнюю конкуренцию на уровне ФС, писать оперативно данные не прямо в файл, а в БД (таблица MEMORY) или в мемкеш, чтобы потом сбросить большую пачку записей в файл за раз.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: file_put_contens вместе с LOCK_EX - как работает блокировка фалов? / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]