Апартаменты с одной резьбой и многоканальные апартаменты
Возможный дубликат:
Не могли бы вы объяснить STA и MTA?
Все потоки ThreadPool находятся в многопоточная квартира.
- согласно MSDN
Что это значит? Я действительно беспокоюсь о том, какая разница между моделью с несколькими вариантами однополюсной квартиры. Или что означает модель квартиры? Я прочитал MSDN на нем, и для меня это не имеет смысла. Я думаю, у меня может быть идея, но я думал, что кто-то здесь может объяснить это на простом английском языке.
Спасибо,
Энтони D
Обновление 1
Найдено
Не могли бы вы объяснить STA и MTA?
Кто-нибудь может быть более описательным?
Обновление 2
Я также ищу ответ о том, как это относится к пулу потоков и что мне нужно следить за этим.
Ответы
Ответ 1
STA (однопоточная квартира) и MTA (многопоточная квартира) относятся к COM. Компоненты COM могут быть спроектированы для доступа одним потоком, и в этом случае они размещаются в STA, или они могут быть сделаны внутренней нитью безопасно и размещен в MTA. Процесс может иметь только один MTA, но многие STA. Если вы собираетесь потреблять COM-компоненты, все, что вам действительно нужно знать, это то, что вам нужно сопоставить квартиру с компонентом или неприятные вещи.
Ответ 2
На самом деле STA и MTA оказывают влияние на код .NET. Смотрите запись в блоге Криса Брамме, чтобы узнать больше подробностей, чем вам, возможно, нужно:
https://devblogs.microsoft.com/cbrumme/apartments-and-pumping-in-the-clr/
Очень важно понимать, как STA перекачивает сообщения в .NET. Это имеет последствия.
Ответ 3
Если ваш COM-объект должен поверить, что он находится в однопоточной среде, используйте STA. Вам гарантируется, что создание и все вызовы будут сделаны одним и тем же потоком. Вы можете безопасно использовать локальное хранилище Thread, и вам не нужно использовать критические разделы.
Если вашему COM-объекту можно получить доступ к нескольким потокам одновременно, используйте MTA - там не будет никаких защитных устройств.
Ответ 4
Как отмечали другие, он, как правило, мало влияет на приложения .NET.
Однако имейте в виду, что тестовый узел Microsoft, используемый для модульных тестов, фактически реализован в STA, что означает, что существуют ограничения на то, что вы можете сделать в unit test. Например, вы не можете сделать WaitAll
в WaitHandle
в unit test, если вы используете тестовый хост Microsoft.
Ответ 5
Вам не нужно беспокоиться об этом, если вы не выполняете COM-interop, и в этом случае возникают проблемы с сортировкой. Он не имеет последствий для самой .net.