2011-06-13 5 views
3

많은 수의 클라이언트를 제공해야하는 서버를 작성 중입니다. 가장 유용한 스레드 전략을 고려하고 있습니다. .NET Framework의 ThreadPool 클래스는 컴퓨터가 실행중인 코어 수와 같은 매개 변수를 고려한 후에 스레드를 할당한다는 것을 읽었습니다. 그러나 사용 가능한 스레드가 없으면 스레드가 사용 가능해질 때까지 대기합니다.C# 서버 스레드 할당

내 소켓의 연결이 상당히 길 수 있습니다. 즉, 클라이언트에 서비스를 제공하고 종료하기 전에 상당 기간 스레드가 실행될 수 있습니다. 따라서 모든 소켓에 대해 새 스레드를 시작하면 많은 수의 스레드가 유휴 상태 (소켓에서 데이터 대기 중)이지만 아직 실행중인 것으로 간주되므로 이론적으로는 ThreadPool이 새 스레드를 할당하지 못하도록 할 수 있습니다 스레드 및 다른 클라이언트에게 서비스를 제공합니다. 반면에 미리 정의 된 수의 스레드를 사용하여 모든 소켓을 제공한다고해서 컴퓨터의 여러 코어를 최적으로 사용할 수는 없습니다.

나는 이것을 수행하는 더 좋은 방법이 있다고 가정하고 있습니다 ... 어떤 제안입니까?

감사합니다.

답변

4

스레드 풀을 활용하지만 소켓에서 데이터를 기다리는 동안 스레드를 사용하지 않습니다 (즉, 스레드가 비 블로킹).

0

.NET ThreadPool은 그보다 훨씬 똑똑합니다. Task/TaskScheduler 프레임 워크 또는 관련 FCL 클래스의 APM 모델을 사용하는 것이 좋습니다. 모든 수동 스레드 생성 전략보다 우수 할 것입니다. 만약 당신이 모든 것을 깨뜨리지 않으면 ...

0

비디오를 많이 추천합니다. Jeffrey Richter가 일반적인 멀티 스레드 및 스레드 풀링에 대해 이야기합니다. 그는 또한 서버 멀티 스레딩을위한 최상의 전략을 언급합니다.