Здравствуйте 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.
Не уверен, что помог разобраться, скорее наоборот запутал :) Ничего, задавай
еще вопросы, будем разбираться.