2013-03-04 5 views
0

Если у меня есть следующие действия в контроллереодновременное обращение в тонких, единорога, пумы, WEBrick

def give_a 
print a 
a = a+1 
end 

Что происходит в каждом веб-сервере, когда приходит запрос, и когда несколько запросов мь?

Я знаю, что webrick и тонкие и однопоточные, поэтому я предполагаю, что это означает, что запрос не обрабатывается до тех пор, пока не будет выполнен текущий запрос.

Что происходит в параллельных веб-серверов, таких как пумы или единорог (возможно, другие) Если есть 2 запросы, поступающие и 2 единорога нити с ними справиться, что обе реакции дают одинаковый a значение? (в ситуации, когда оба запроса вводят метод в одно и то же время)

или все зависит от того, что происходит на самом сервере, и доступ к данным последователен?

Есть ли способ иметь мьютекс/семафор для параллельных веб-серверов?

ответ

2

afaik, приложение для рельсов составляет YourController.new с каждым запросом env.

из чего вы отправляете, невозможно увидеть, что a средства. когда это какая-то переменная общего класса, то она является изменчивым состоянием и может быть изменена из обоих потоков запросов.

+0

спасибо, являются ли запросы к базе данных в одной очереди (в стандартном приложении)? - если 'a' - это значение, взятое из базы данных –

+0

queue? нет, нет очереди! если вы хотите гарантировать, что значения не изменяются во время запроса, вам необходимо заблокировать базу данных. это очень плохая практика, называемая пессимистической блокировкой. то, что вы обычно делаете, - это оптимистическая блокировка с использованием предложений where. – phoet