명명된 파이프 인스턴스
가장 간단한 파이프 서버는 파이프의 단일 instance 만들고, 단일 클라이언트에 연결하고, 클라이언트와 통신하고, 클라이언트와의 연결을 끊고, 파이프 핸들을 닫고, 종료합니다. 그러나 파이프 서버가 여러 파이프 클라이언트와 통신하는 것이 더 일반적입니다. 파이프 서버는 단일 파이프 instance 사용하여 각 클라이언트에 연결하고 순서대로 연결 해제하여 여러 파이프 클라이언트와 연결할 수 있지만 성능은 저하됩니다. 파이프 서버는 여러 클라이언트를 동시에 효율적으로 처리하기 위해 여러 파이프 인스턴스를 만들어야 합니다.
여러 파이프 인스턴스를 서비스하기 위한 세 가지 기본 전략이 있습니다.
- 파이프의 각 instance 대해 별도의 스레드를 만듭니다. 다중 스레드 파이프 서버의 예제는 다중 스레드 파이프 서버를 참조하세요.
- ReadFile, WriteFile 및 ConnectNamedPipe 함수에서 OVERLAPPED 구조를 지정하여 겹치는 작업을 사용합니다. 예를 들어 겹치는 I/O를 사용하는 명명된 파이프 서버를 참조하세요.
- 작업이 완료될 때 실행할 완료 루틴을 지정하는 ReadFileEx 및 WriteFileEx 함수를 사용하여 겹치는 작업을 사용합니다. 예를 들어 완료 루틴을 사용하여 명명된 파이프 서버를 참조하세요.
다중 스레드 파이프 서버는 쓰기가 가장 쉽습니다. 각 instance 스레드는 단일 파이프 클라이언트에 대한 통신을 처리하기 때문입니다. 시스템은 필요에 따라 각 스레드에 프로세서 시간을 할당합니다. 그러나 각 스레드는 많은 수의 클라이언트를 처리하는 파이프 서버의 단점인 시스템 리소스를 사용합니다.
단일 스레드 서버를 사용하면 여러 클라이언트에 영향을 주는 작업을 보다 쉽게 조정할 수 있으며 여러 클라이언트가 동시에 액세스하지 못하도록 공유 리소스를 보호하는 것이 더 쉽습니다. 단일 스레드 서버의 과제는 클라이언트의 동시 요구 사항을 처리하기 위해 프로세서 시간을 할당하기 위해 겹치는 작업의 조정이 필요하다는 것입니다.