2014-07-12 4 views
5

윈도우 스레드 풀에 대한 일부 세그먼트를 읽었습니다. 그것은 CLR 스레드 풀처럼 보입니다.Windows 스레드 풀과 CLR 스레드 풀의 차이점

CLR은 Windows를 기반으로하므로 CLR 스레드는 Windows 스레드 풀을 기반으로합니다. 맞습니까?

각 .net 프로세스에 하나의 스레드 풀이 있다는 것을 알고 있습니다. Windows 스레드 풀의 상황은 어떻습니까? 운영 체제에는 하나의 스레드 풀이 있습니까?

C#에서는 개발자가 코드로 창 스레드 풀을 제어 할 수 있습니까?

+3

읽은 내용을 묻는다면 링크 (또는 적어도 출판물 이름)를 포함하십시오. –

답변

13

이것은 CLR 구현 질문 중 하나로서 직접적인 대답이 아닙니다. ThreadPool이 구현되는 방법을 결정하는 것은 CLR이 아닙니다. CLR 호스트의 작업입니다. CLR을 운영 체제와 통합하는 소프트웨어 계층. CLR이 thread-pooly 작업을 수행하는 데 사용하는 핵심 인터페이스는 IHostThreadPoolManager입니다. 관리되지 않는 COM 인터페이스이지만 ThreadPool 클래스 멤버와 거의 일대일 매핑을 인식하는 데는 거의 문제가 없습니다.

많은 CLR 호스트가 구현되어 있습니다. mscoree.dll에 의해 구현 된 데스크톱 응용 프로그램의 기본 CLR 호스트가 더 많이 인식됩니다. Windows 버전마다 다른 버전이 있습니다. 그리고 ASP.NET, SQL Server, Visual Studio 호스팅 프로세스, Silverlight, Windows Phone, XBox에 대한 사용자 지정 호스트. 그리고 덜 알아볼 수있는 커다란 관리되지 않는 응용 프로그램은 .NET 언어로 구현 된 스크립팅을 지원하기 위해 CLR을 호스팅 할 수 있습니다. AutoCAD와 같은 CAD 프로그램이 표준 예입니다.

스레드의 핵심 개념은 CLR에서 가상화됩니다. IClrTask와 IClrTaskManager는이를위한 호스팅 인터페이스입니다. 호스트가 운영 체제 스레드가 아닌 다른 스레드에서 스레드를 구현할 수있게합니다. 섬유처럼. 아무도 실제로이 btw 않습니다.

물론 Windows에는 스레드 풀용 자체 API가 있습니다. CreateThreadPool() winapi 함수는 그 공을 굴립니다. 그러나 dumpbin.exe/imports를 사용하여 내 컴퓨터의 mscor * .dll 파일을 파고 들며 사용되는 것을 볼 수 없습니다. 문제의 적어도 일부는 CreateThreadPool()이 Vista 이후에만 사용할 수있는 최신 winapi 함수라는 것입니다. XP 이전 버전의 Windows 버전은 훨씬 간단하게 구현되었습니다. 따라서 적어도 .NET 4.5.2의 데스크톱 버전에서는 Windows 스레드 풀이 관련성이없는 것처럼 보입니다.

관련 문제