2012-01-11 1 views
3

현재 .NET에서 Windows 서비스를 작성하고 다른 프로세스가 내 서비스와 통신하도록 명명 된 파이프를 사용하고 있습니다. NamedPipeServerStream의보다 복잡한 생성자에는 maxNumberOfServerInstances라는 설명이 포함 된 매개 변수가 있습니다. 굉장해. 하지만 그게 무슨 뜻 이죠?NamedPipeServerStream 클래스의 maxNumberOfServerInstances의 목적은 무엇입니까?

MSDN의 문서는 설명에도 도움이된다 : 같은 이름을 공유하는 서버 인스턴스의

최대 수입니다.

오케이. 그것은 아직도 저에게 이것이 무엇을하는지, 어떻게 활용 하는지를 말해주지 못합니다. NamedPipeServerStream이 "연결을받을 때이 코드를 실행하십시오."라는 대리인을 받아 들인 경우 각각의 "서버 인스턴스"가 해당 코드를 실행할 수 있도록하는 것이 합리적입니다. 하지만 그렇지 않습니다.

답변

2

이상한 논점입니다. Windows API function (CreateNamedPipe)에 대한 자세한 내용은 설명서에서 확인할 수 있습니다. 파이프는 파이프 버퍼에 대해 매우 귀중한 리소스를 사용하며 비 페이징 커널 메모리 풀에서 할당됩니다. I 이 인수는 Windows에서 풀 사용을 최적화하는 데 도움이됩니다. 그것이 어떻게 이루어 졌는지는 절망적으로 문서화되지 않았습니다.

여러 클라이언트 연결을 허용하는 단일 서비스의 완벽한 수는 1입니다. 동일한 작업을 모두 수행하는 여러 서비스를 실행하려는 경우에만이 값을 늘립니다. 꽤 드물다.

+5

나는 그것이 옳다고 생각하지 않는다. 각 동시 클라이언트 연결은 독점적으로 하나의 파이프 인스턴스를 사용합니다. 동일한 파이프 인스턴스에 연결된 여러 클라이언트를 가질 수 없습니다. 마찬가지로 .NET NamedPipeServerStream 인스턴스는 한 번에 하나의 클라이언트에만 연결됩니다. 따라서이 인수로 1을 사용하는 서비스는 모든 클라이언트 요청을 직렬화합니다. 오히려이를 연결 풀의 크기와 비슷하게 생각하십시오. 서비스는 처리 할 수있는 진정한 동시 클라이언트 요청의 수로 서비스를 설정하려고합니다. –