Jeśli dwóch klientów dzwoni do serwera w tym samym czasie, serwer najprawdopodobniej będzie w stanie odpowiedzieć obu klientom niemal jednocześnie. Klienci tutaj definiuję je na poziomie przeglądarki.
To znaczy, że na tej samej maszynie, jeśli używasz dwóch przeglądarek do załadowania tej samej witryny/strony w tym samym czasie, oba powinny być załadowane w tym samym czasie.
Jednak ponieważ mówimy o PHP, musisz wziąć specjalne uwagi na temat sesji. Jeśli strony korzystają z sesji, serwer obsługuje tylko jedną stronę naraz. Wynika to z tego, że plik sesji zostanie zablokowany, dopóki skrypt nie zostanie zamknięty.
Spójrz na ten przykład. Dwa pliki są ładowane z tej samej sesji, co ta sama przeglądarka, tego samego użytkownika.
scripta.php requested scripta.php served
------+---+---------------------------------+------------------------>
scripta.php started
scriptb.php requested scriptb.php started
---------------+-------------------------------+-----------------+--->
scriptb.php served.
Należy zauważyć, że skrypt scriptb.php jest uruchamiany dopiero po wyświetleniu pliku scripta.php. dzieje się tak, ponieważ po uruchomieniu scripta.php plik sesji jest zablokowany na inne skrypty, dzięki czemu scripta.php może zapisywać do pliku sesji. Gdy skrypt scripta.php zostanie ukończony, plik sesji zostanie odblokowany, a zatem inne skrypty będą mogły z niego korzystać. Dlatego skrypt scriptb.php będzie czekał, aż plik sesji zostanie zwolniony, a następnie zablokuje plik sesji i użyje go.
Ten proces będzie powtarzany, aby zapobiec wielokrotnemu zapisywaniu skryptów w tym samym pliku sesji, powodując opóźnienia. Dlatego zaleca się wywołanie session_write_close
(), gdy nie używasz już sesji, szczególnie na stronie internetowej używającej wielu elementów iframe lub AJAX.
Sprawdź również tę odpowiedź: http://konrness.com/php5/how-to-prevent-blocking-php-requests/ – trante