2009-05-14 3 views
1

COM EXE out-of-proc 서버가 해당 인터페이스 중 하나에서 API를 노출하고 있습니다. 이 API의 기능은 URL을 게시하는 것입니다.COM 서버에 작업 대기열이 필요합니까?

내 클라이언트가 COM 서버 인스턴스를 만들고이 API를 새 URL로 호출합니다.

클라이언트는 URL을 게시해야 할 때마다이 COM 서버의 인스턴스를 만듭니다.

클라이언트가 게시 한 모든 URL을 추적하고 아무것도 잃어 버리지 않도록 COM 서버에 큐를 구현해야합니까?

궁금한 점은 COM 개체를 만들 때마다 새로운 프로세스가 시작된다는 것입니다. 그렇다면 서버에 작업 대기열을 구현할 필요가 없다고 생각합니다.

하지만 하나의 인스턴스 만 메모리에 남아 있으면 클라이언트가 게시 한 작업/URL이 손실 될 수 있습니다.

답변

1

일반적으로 COM은 모든 요청에 ​​대해 하나의 서버 프로세스를 시작하고 해당 프로세스의 모든 개체를 인스턴스화합니다. 모든 개체 (전역 변수 또는 정적 멤버 변수)간에 데이터를 공유하는 경우 동기화를 처리하거나 COM 구성 요소를 아파트 스레드 (STA)로 만들어야합니다.

동기화가없고 구성 요소가 멀티 스레드 (MTA) 인 경우 한 번에 여러 스레드에서 쓰는 경우 인스턴스간에 공유되는 모든 데이터가 손상 될 수 있습니다.

+0

내 COM 서버는 단일 스레드입니다. 그래서 COM 서버에 여러 요청을 할 수 있습니까? 또한 COM 서버가 요청을 받고 즉시 반환되기를 바랍니다. URL을 게시하는 COM 서버에 두 번째 스레드를 구현해야하는 것처럼 보입니다. – anand

+0

구성 요소가 STA 인 경우 여러 요청을 게시 할 수 있지만 요청이 실행되면 첫 번째 요청이 반환 될 때까지 모든 후속 요청이 자동으로 일시 중단되고 보류중인 요청 중 하나가 재개됩니다. 이는 공유 변수 손상을 방지하기 위해 COM에 의해 자동으로 수행됩니다. 내부에 필요한 스레드의 양을 알 수 있지만 동기화를 처리해야합니다. – sharptooth

관련 문제