Цитата:
http://www.introligator.org/articles/3/84
Однопоточные апартаменты.
В STA каждый поток, который использует OLE, находится в отдельном апартаменте и COM синхронизирует все входящие вызовы с помощью очереди оконных сообщений. Для этого COM неявно создает окно и при вызове любого метода объекта посылает этому окну сообщение с помощью функции PostMessage. (Функция PostMessage создает MSG структуру для сообщения и копирует ее в очередь сообщений окна.) Процесс с единственным потоком выполнения может служить иллюстрацией этой модели.
STA апартаменты имеют в точности один поток, так что все объекты, которые «живут» в однопоточном апартаменте, могут получать вызовы методов только от одного потока, который принадлежит этому апартаменту.
Главным достоинством апартамента STA является то, что разработка объекта COM и клиентской части проста в том смысле, что нет нужды заботиться о синхронизации вызовов методов и их выполнения: следующий метод начнет выполняться только после того, как закончится выполнение предыдущего. Аналогично не нужно заботиться о синхронизации доступа к данным объекта.
Главным недостатком апартамента STA является его неэффективность. Даже если синхронизация вызовов методов и не нужна, она все равно выполняется.
То-есть, не неэффективность, а аналогичная эффективность апартаменту МТА, при возможной большей эффективности. С такой реализацией вся соль пропадает..
Но, не смотря на это..
Цитата:
Несмотря на это, предпочтительнее всегда использовать апартамент STA за исключением тех случаев, когда реализация конкретного сервера в рамках модели STA попросту невозможна.
Чем ближе знакомлюсь с СОМ, тем больше различных "НО" и "ЕСЛИ". Погуглю, пожалуй..
Himik писал(а):
Или ты хочешь отказаться от блокировок, используя только почтовый ящик сообщений?
Видел у Танненбаума на этот счёт... Найду - процитирую. Там как стихотворение:)