2010-01-24 4 views
2

가능한 중복 :
Maximum number of threads in a .NET app?.NET 프로세스에 존재할 수있는 스레드 수에 하드 제한이 있습니까?

우리가 .NET 응용 프로그램에서 생성 할 수있는 쓰레드의 수에 제한이 있습니까?

스레드의 스택을 할당해야하므로 사용 가능한 메모리의 양에 따라 만들 수있는 스레드 수가 제한된다고 가정합니다. 내가 틀렸다면 나를 바로 잡아주세요. 스레드의 수를 제한하는 다른 요소가 있습니까? 또는 스레드 수를 특정 숫자로 제한합니까?

기계 사양을 알고 있다면 기계에 생성 할 수있는 최대 스레드 수를 어떻게 계산할 수 있습니까?

+0

주 : 그건 당신이 실제로으로 실행중인 제품의 경우

를 결정하기 위해 교착 상태에 대한 다음 링크를 시도 내가 내가 응용 프로그램을 조사하고 있기 때문에 이것을 묻는 것은 스레드가 _a 많이 _ 포함됩니다. 고의적으로 최대 수의 스레드를 만들려고하지 않습니다. :-) – driis

+2

악몽 유지 관리 시나리오와 비슷합니다. 다른 사람의 대량 (아마도 불필요하게) 다중 스레드 코드에서 동시성 문제를 디버깅하는 것보다 많은 문제가 더 어렵지 않습니다. – spender

+0

이것은 [.NET 응용 프로그램의 최대 스레드 수]와 같습니다 (http://stackoverflow.com/questions/145312/maximum-number-of-threads-in-a-net-app). – Thorsten79

답변

3

항상 그렇듯이 레이몬드 첸 (Raymond Chen)은 대답은 his blog입니다. 그의 테스트는 비 관리 코드를 사용하여 실행 된 것으로 보입니다. 내 생각 엔 .NET Framework에는 실제로 프로세스 당 스레드 수를 제한하는 것은 없으며 O/S에 의해 제한이 적용됩니다. 그게 사실이라면 그의 시험은 여전히 ​​유효합니다.

또한 32 비트와 64 비트 컴퓨터간에 차이가 있는지 확신 할 수 없습니다. 결과가 RAM 크기와 32 비트/64 비트 CPU 및 CPU 수와 관련되어 있다고 생각합니다. 13000 개의 스레드를 생성 할 수 있었던 것처럼 보였습니다.

실행중인 13k 스레드의 큰 문제는 context switching이 사용 가능한 모든 CPU를 먹어 버리고 작업을 거의하지 않을 가능성이 높다는 것입니다.

찾고있는 응용 프로그램이 강렬한 작업을 수행해야하는 많은 스레드를 만드는 경우 컨텍스트 전환이 발생하는만큼 문제가 발생하지 않을 수도 있습니다. 분명히 멀티 스레드 응용 프로그램의 가장 일반적인 문제는 리소스 교착 상태이지만이 시나리오의 문제를 해결하는 데 사용할 수있는 여러 도구가 있습니다.

+0

감사합니다.이 대답은 매우 도움이되었습니다. – driis

관련 문제