Будет ли thread.join () блокировать других клиентов? - PullRequest
3 голосов
/ 13 марта 2010

В веб-приложении asp.net, скажем, каждый раз, когда пользователь делает запрос и страница загружается, запускается поток, который использует thread.join (), чтобы заблокировать выполнение до его завершения.

Скажите, что завершение этой темы занимает 10 секунд.

Означает ли это, что если 5 полностью отдельных пользователей отправляют запрос на эту страницу, всего через миллисекунды после последней, означает ли это, что последний пользователь будет ждать 50 секунд, чтобы завершить свой запрос? Или каждый клиентский запрос нарезан?

Ответы [ 3 ]

4 голосов
/ 13 марта 2010

Как правило, другие пользователи не будут заблокированы.

Однако вызов Join связывает поток пула потоков. Как только все потоки используются, последующие запросы должны ждать, пока поток станет доступным.

2 голосов
/ 13 марта 2010

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

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

0 голосов
/ 13 марта 2010

Похоже, вы описываете сценарий, в котором каждый пользовательский запрос создает новый Thread, который выполняет задачу во время загрузки страницы. Загрузка страницы выполняет несколько операций, а затем вызывает thatThread.Join. Если так, то ...

Сколько времени потребуется 5 пользователям для одновременного доступа к странице, во многом зависит от того, что делает thatThread. В частности, если отдельно порожденные нити взаимодействуют друг с другом. Например, если они взяли блокировку на общем ресурсе для части выполнения, тогда да, одновременные запросы будут влиять на производительность. Если блокировка удерживается на время операции, то да, это может оказать линейное влияние на производительность.

С другой стороны, если они выполняют полностью независимые задачи, они не будут оказывать линейного влияния на производительность.

Если бы вы могли предоставить больше подробностей о том, что делала нить, мы могли бы лучше ответить на вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...