Если у меня есть следующие действия в контроллереодновременное обращение в тонких, единорога, пумы, WEBrick
def give_a
print a
a = a+1
end
Что происходит в каждом веб-сервере, когда приходит запрос, и когда несколько запросов мь?
Я знаю, что webrick и тонкие и однопоточные, поэтому я предполагаю, что это означает, что запрос не обрабатывается до тех пор, пока не будет выполнен текущий запрос.
Что происходит в параллельных веб-серверов, таких как пумы или единорог (возможно, другие) Если есть 2 запросы, поступающие и 2 единорога нити с ними справиться, что обе реакции дают одинаковый a
значение? (в ситуации, когда оба запроса вводят метод в одно и то же время)
или все зависит от того, что происходит на самом сервере, и доступ к данным последователен?
Есть ли способ иметь мьютекс/семафор для параллельных веб-серверов?
спасибо, являются ли запросы к базе данных в одной очереди (в стандартном приложении)? - если 'a' - это значение, взятое из базы данных –
queue? нет, нет очереди! если вы хотите гарантировать, что значения не изменяются во время запроса, вам необходимо заблокировать базу данных. это очень плохая практика, называемая пессимистической блокировкой. то, что вы обычно делаете, - это оптимистическая блокировка с использованием предложений where. – phoet