Распределяется ли пул потоков между доменами приложений? - PullRequest
18 голосов
/ 10 августа 2010

Рассмотрим процесс, который создает несколько доменов приложений.Эти домены приложений имеют общий пул потоков?Если да, как это согласовано между несколькими доменами приложений?

Ответы [ 3 ]

10 голосов
/ 10 августа 2010

ThreadPool является общим для всех доменов приложений - так как это означает, что потоки могут в конечном итоге переключаться между доменами приложений (потенциально часто!), Было проделано много работы вокруг этого:

http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx

[...] Фактически, мы уже нарушаем это «правило»: начиная с .NET 3.5, пул потоков CLR поддерживает отдельные очереди FIFO для каждого AppDomain в процессе и дополнительную независимую очередь FIFO для «собственных» рабочих элементов.такие как те, которые поставлены в очередь хостом (ASP.net является основным пользователем этой функции).Мы выполняем циклический перебор между этими рабочими очередями, позволяя каждому выполнить работу в течение некоторого времени, прежде чем перейти к следующему. [...]

Кстати, обратите внимание, что строго говоря, ThreadPool не является общимчерез весь процесс, поскольку CLR v4 позволяет загружать бок о бок с V2, и у каждого будет свой пул потоков.

5 голосов
/ 10 августа 2010

Пул потоков распределяется между всеми доменами приложений, так как каждый поток пула потоков не зависит от контекста, и весь профиль времени выполнения пула потоков сильно зависит от оборудования, на котором вы работаете (количество процессов, гиперпоточность и т. Д.)

Существует один пул потоков на процесс.Размер пула потоков по умолчанию составляет 25 потоков на каждый доступный процессор.Количество потоков в пуле потоков можно изменить с помощью метода SetMaxThreads.Каждый поток использует размер стека по умолчанию и работает с приоритетом по умолчанию.

Источник: http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

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

0 голосов
/ 10 августа 2010

Не уверен на 100%, но я думаю, что пул потоков один раз за процесс, а не один раз за домен приложения. Попробуйте посмотреть эту статью на thread & appdomain :

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