Что если несколько пользователей одновременно обратятся к скрипту?
====================================================================

 Имеется следующая связка:  
  

apache - php - mysql  

или  

nginx - php - mysql  
  

Собственно вопросы: **Что происходит когда**  
  

1) **разные** пользователи **одновременно** обращаются **к разным php-скриптам** на nginx или apache сервере?  

2) а если одновременно и **к одному скрипту**?  

3) несколько пользователей по средством скрипта **одновременно** запросили **данные из БД (MySQL)**, например, для рендера динамической страницы (и если эта самая страница не закеширована не сервере)?  

4) нужно **одновременно записать в одну таблицу** (MySQL) данные от **нескольких** пользователей? Например, они одновременно отправили комментарий?  
  

Интересно именно в контексте apache/nginx - php - mysql.  

Как происходит обработка одновременных запросов от разных пользователей в логике описанных серверов, в логике php и mysql? Ставятся ли запросы в очередь, выполняются ли параллельно или может происходят какие-то ошибки?  

И в какую сторону копать, чтобы разобраться в этом? Заранее спасибо. 

 1) разные пользователи одновременно обращаются к разным php-скриптам на nginx или apache сервере?  
  

Не очень понятен вопрос. Каким образом разные пользователи обращаются к разным php скриптам ?  

Пользователи обращаются к веб серверу (apache/nginx), и к скриптам (с точки зрения скрипта) обращается только один пользователь, от имени которого запущен собственно apache/nginx.  

Как работает многозадачность в apache/nginx можно читать спецификации. Но парралельная обработка одного и того же скрипта не проблема.  
  

2) а если одновременно и к одному скрипту?  
  

Тоже самое  
  

3) несколько пользователей по средством скрипта одновременно запросили данные из БД (MySQL), например, для рендера динамической страницы (и если эта самая страница не закеширована не сервере)?  
  

Опять таки, запрос идет от одного пользователя, от имени которого запущен веб-сервер, который запускает php скрипт, который делает запрос. Нормальная база данных написана так, чтобы обрабатывать много парралельных запросов. Поэтому подобный вопрос имеет смысл поднимать только для очень нагруженных серверов, когда скорости не хватает, и нужно идти в оптимизацию/кластеризацию.  
  

4) нужно одновременно записать в одну таблицу (MySQL) данные от нескольких пользователей? Например, они одновременно отправили комментарий?  
  

Mysql обработает запросы по очереди, в порядке их поступления. Именно потому, что в базу пишут не разные скрипты одновременно, а сам сервер базы - параллельные запросы он поставит в очередь и выполнит. 

 Весь вопрос вокруг банальной и обычной для новичков ошибки.   

Я считал что-то из базы, обработал и хочу записать.   

Что будет, если между этими событиями база изменится?  

Правильный ответ: база не должна изменяться между этими событиями.   

Либо блокировка записей, либо - и желательно - правильные запросы, которые делают получение данных и их изменение атомарным. 

 Кое-что из перечисленного выстраивается в очереди, кое что может работать и параллельно (это настраивается).  
  

Ну и ошибки могут быть, конечно, если код не рассчитан на параллельную работу. 

 1) и 2) разные пользователи запустят скрипт, более ничего не произойдет. Проблемы могут быть, если этот скрипт пишет данные в файл. В таком случае данные в файле будут от последнего, кто запустил скрипт, а в случае записи в конец файла получим кашу :)  

3) и 4) работа с базой по сети, там есть очередь коннектора и блокировок, причем это уже проблемы сервера, а не скрипта, можете не беспокоиться. Беспокоиться нужно если база в файле, например sqlite, msaccess, вот там блокировки нужно самостоятельно обрабатывать. 

 Так ведь скрипт - это тот же index.php, то есть сам сайт по сути) Если уж совсем на пальцах, то сервер - это папка, где хранятся файлы, а браузер просматривает эти файлы (это и есть HTTP), что произойдет если миллион человек запросят файл index.php? Сервер им его отдаст, ибо это просто его просмотр. Это не многозадачность, это просто обращение к файлу. Другой вопрос если этот скрипт что-то пишет в другой текстовый файл (не в БД, БД это как раз многозадачность), то там будут возникать блокировки и вообще что угодно, вплоть до его повреждения. Но это уже из другой области вопрос, а вы про HTTP спрашиваете.