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