참고:
본 글은 COM(Component Object Model)의 개념을 재정리하기 위해 스터디용으로 작성되었습니다.
COM Threading Model의 필요성
- in-process server를 제외한 COM 서버는 기본적으로 단일 COM 개체에 여러 클라이언트 스래드가 접근 가능한 다중스래드 환경에 노출되어 있다. 바로 이 클라이언트의 접근 동기화를 위해 COM threading model이 존재한다.

COM Threading Models
- single-threading model, apartment-threading model, free-threading(multi-threaded) model, mixed-threading(apartment 및 free-threading 지원) model, neutral model의 총 5가지 모델이 존재한다(명칭이 혼란스럽다. free-threading, mixed-threading model, neutral model 역시 apartment를 통한 threading 모델이다. 여기서는 apartment-threading model까지 포함한 이들을 가리켜 Apartment 연관 모델이라 지칭하겠다).
- COM 라이브러리를 사용하기 전에 반드시 호출해야 하는 CoInitializeEx()이 바로 이 모델 지정에 사용된다.
- 클라이언트와 COM 서버의 threading model이 서로 다르더라도 COM run-time 라이브러리가 이들 간 통신을 thread-safe하게 조절하지만, 성능 저하가 발생한다.

more..

2008/01/18 22:54 2008/01/18 22:54

트랙백 주소 :: http://anyflow.net/trackback/333

댓글을 달아 주세요

제프리 릭터의 Programming Applications for Microsoft Windows에 담긴 내용입니다.

  • 커널 객체(kernel object)는 사용자 모드(user mode)의 메카니즘보다 훨씬 더 유용하더라..사실 사용자 모드의 것보다 딸리는 점이라고는 성능밖에 없더라..(커널 객체를 다루는 함수는 반드시 사용자 모드에서 커널 모드로 전이(transition)하게 된다. 이 전이에서 성능 저하가 일어난다.)

  • 쓰래드 동기화에서 거의 대부분의 커널 객체는 신호 상태(signaled state)가 아니면 비신호 상태(unsignaled state)에 놓이게 되더라..

  • 쓰래드 동기화를 위해 윈도우즈가 제공하는 커널 객체 : 이벤트(event), 대기가능 타이머(waitable timer), 세마포어(semaphore), 뮤텍스(mutex)

  • Wait 함수 : 쓰래드로 하여금 자의적으로 대기(wait) 상태로 들어가게 하더라.. (특정 커널 객체가 신호상태가 될 때까지)
  • //객체 하나에 대해서 대기
    DWORD WaitForSingleObject(
        HANDLE hObject,
        DWORD dwMilliseconds);

    //여러 객체에 대해서 대기
    DWORD WaitForMultipleObjects(
        DWORD dwCount,
        CONST HANDLE* phObjects,
        BOOL fWaitAll,
        DWORD dwMilliseconds);

    fWaitAll : TRUE일 경우, 모든 커널 객체가 신호 상태가 될 경우에만 호출자 쓰래드가 실행된다. FALSE일 경우에는 커널 객체중 하나만이라도 신호 상태가 되면 호출자 쓰래드가 실행된다.

    반환 값
    WAIT_OBJECT_0, WAIT_TIMEOUT, WAIT_FAILED
  • 2004/10/25 22:39 2004/10/25 22:39

    트랙백 주소 :: http://anyflow.net/trackback/17

    댓글을 달아 주세요