Шаг 166.
Среда программирования Visual C++.
Архитектура СОМ. Потоковые модели. Многопоточные отделения

    На этом шаге мы рассмотрим особенности многопоточных отделений.

    Многопоточные отделения поддерживают модель свободных потоков. От STA они отличаются тем, что в одном МТА могут находиться несколько потоков. МТА позволяет достичь максимальной производительности.

    Все потоки, вызывающие CoInitalizeEx() с параметром COINIT_MULTITHREADED, располагаются в одном МТА и называются МTA-потоками. В отличие от STA в процессе может быть только одно МТА. Все вновь создаваемые МТА-потоки попадают в одно и то же МТА. Важно, что в этом случае не требуется маршалинг между потоками.

    Необходимо, чтобы СОМ-объекты, созданные МТА-потоками, учитывали возможность их многопоточного использования и содержали собственный код синхронизации. Снимая ограничения, накладываемые маршалингом, МТА-модель обеспечивает самую высокую производительность и пропускную способность на стороне сервера.

    В МТА потоки могут обращаться к СОМ-объекту одновременно, и СОМ никак не синхронизирует их запросы. Отсутствие синхронизации означает, что рассчитанные на эту модель СОМ-объекты должны быть безопасными с точки зрения взаимодействия потоков. Поэтому для защиты статических и глобальных данных компонента нужно использовать синхронизирующие объекты - события, мьютексы и семафоры.

    На следующем шаге мы рассмотрим указание потоковой модели в реестре.




Предыдущий шаг Содержание Следующий шаг