![]() ![]() ![]()
Какой рейтинг вас больше интересует?
|
![]()
Блокирование сессий в PHP2012-06-21 13:53:22 (читать в оригинале)Как-то я потратил довольно много времени, пытаясь понять, почему десяток асинхронных запросов к PHP-скрипту выстраивается в очередь вместо того, чтобы отрабатывать параллельно. Чтобы показать наглядно, набросаем пару тестовых скриптов.
session_start(); sleep(10); echo '1';
session_start(); echo '2'; Ничего необычного, правда? Теперь запустим их параллельно. Воспользуемся jQuery: $.get('/test1.php'); $.get('/test2.php'); В итоге получается вот такая картинка (это вкладка Net из Firebug):
При использовании сессий «из коробки», данные хранятся в одном единственном файле, который оказывается заблокированным с момента вызова В том случае, если сессия вам нужна только для чтения, или есть возможность записать всё необходимое перед медленной частью скрипта, можно её закрыть явно при помощи session_start(); session_write_close(); sleep(10); echo '1'; В этом случае мы получим желаемую картину: Если же необходимо писать в сессию после медленных операций, придётся сменить «коробочную» сессию на свою реализацию с неблокируемым хранилищем, таким, например, как база данных. Стоит отметить, что если при этом не позаботится о race condition, можно наступить на хорошие такие грабли. Материалы:
|
![]() ![]() ![]()
Категория «Религия»
Взлеты Топ 5
Падения Топ 5
![]()
Популярные за сутки
|
Загрузка...

взяты из открытых общедоступных источников и являются собственностью их авторов.