Re: Threding model
От: alexf США  
Дата: 05.05.01 06:49
Оценка:
Здравствуйте john, 05.02.2001 02:20:53 вы писали:

>Имеем ЕХЕ СОМ — сервер. Применительно ли к нему понятие MTA и STA модели?

>или это все только для ДЛЛ-серверов?

Наблюдается некоторая путаница в понятиях. MTA и STA — это типы апартментов (как это
понятие принято называть по-русски?), в то время как потоковые модели DLL-серверов
включают Single, Apartment, Free и Both (а также Neutral в Win2K). Типы апартментов
и потоковые модели это разные вещи. Потоковая модель показывает в каком апартменте
может быть создан объект. Объекты с моделями Single и Apartment могут жить только в
STA, Free — только в MTA, Both — как в STA, так и в MTA.

В процессе может быть не более одного MTA и произвольное количество STA. Каждый поток
процесса либо входит в MTA, либо составляет собой STA. Принадлежность потока определяется
тем как в нем была инициализирована библиотека COM. Это будет MTA, если был вызов
CoInitializeEx с флагом COINIT_MULTITHREADED, и STA в остальных случаях. (Для полноты
картины: если поток вообще не инициализировал COM, он по умолчанию попадает в MTA, но
это деталь реализации и на нее не стоит полагаться).

>Если да (т.е. применимо), то скажите плиз:


Применимо в том смысле, что EXE-сервер может по своему желанию создавать объекты как
в STA, так и в MTA. Объекты, реализованные в DLL, в этом смысле пассивны — апартмент,
в который они попадают зависит от потоковой модели DLL и от того в каком потоке был
вызов CoCreateInstance и не зависит от воли сервера. EXE-сервер может создавать свои
объекты в том апартменте, в котором захочет.

>- я понимаю, что если мы имеем клиента для этого СОМ-ЕХЕ сервера и у него

>(клиента) есть несколько потоков (а сервер работает как MTA), то все эти
>вызовы идут к серверу параллельно.

>Объясните тогда вот что... Если имеем сервер (ЕХЕ) работающий одним

>инстансом в системе и к нему 2 СОМ-клиента, то.. вызовы от этих СОМ-клиентов
>будут идти как от разных процессов. И в таком случае они (при MTA работе
>сервера) будут тоже выполнены параллельно или будут выстроены в
>последовательную очередь?
>
>Короче меня интересует как организуется очередь вызовов не между потоками,
>а между процессами... в случае MTA и STA модели для ЕХЕ серверов

Вызовы ведь идут не просто в EXE-сервер, вызовы идут какому-то конкретному
объекту в EXE-сервере. Если объект создан в MTA, то вызовы будут обрабатываться
параллельно и независимо в разных потоках EXE-сервера. Если объект создан в STA,
то вызовы будут сериализованы, то есть будут выполняться последовательно в том
потоке сервера, который составляет этот STA.

Не уверен, что помог разобраться, скорее наоборот запутал :) Ничего, задавай
еще вопросы, будем разбираться.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.