2010-12-29 5 views
1

누군가가 이러한 일들이 상관 관계를 어떻게 나에게 지울 수 없습니다 :TPL 작업, 스레드 등

작업
스레드
ThreadPool이의 스레드
Paraller.For/foreach는/호출

, 즉 작업을 생성하고 실행하면 스레드가 실행되는 위치는 어디입니까? 그리고 제가 Parallel을 호출 할 때 * 실제로 어떤 일이 벌어지고 있습니까?

기사, 블로그 게시물 등에 대한 링크도 매우 환영합니다!

+0

우수 도서 , Windows에서의 동시 프로그래밍, 좋은 읽기, 적어도 지금까지 해본 절반 이상 ;-) –

답변

1

시스템의 이상적인 상태는 CPU 코어 당 1 개의 활성 스레드를 실행하는 것입니다. 작업을 좀 더 일반적인 용어로 정의하면 TPL은 이상적인 상태를 달성하는 데 가장 가까워 지도록 사용할 스레드 수와 각 스레드에서 수행 할 작업을 동적으로 결정할 수 있습니다. 이는 코드를 작성할 때 응용 프로그램에서 사용할 수있는 CPU 코어의 수, 다른 작업과의 관련 정도 등을 알 수 없기 때문에 거의 항상 런타임에 동적으로 가장 잘 결정됩니다.

0

스레드 :은 실제 OS 스레드이며 핸들과 ID를가집니다.

ThreadPool :은 이미 생성 된 OS 스레드 컬렉션입니다. 이 스레드는 런타임에 의해 소유/유지되며 코드는 잠시 동안 "빌려"허용됩니다. 이러한 스레드에서 단기 작업 만 수행 할 수 있으며 스레드 상태를 수정하거나 삭제할 수 없습니다 이 스레드. 이 두 가지에

최상의 추측 :

작업 : 모두에 따라 스레드 풀에서 미리 만들어진 스레드에서 실행 얻을 수도 있고, 사용자 모드 일정의 일부로 실행 얻을 수 있습니다, 이것은 어떤 런타임은 최선이라고 생각합니다. 또 다른 추측 : TPL에서 사용자 모드 스케줄링은 OS Fibres를 기반으로하지는 않지만 자체 구현 (및 작동) 구현입니다.

Parallel.For : 사실, 이것이 어떻게 구현되는지 전혀 모른다. 런타임은 병렬 비트를 수행 할 새 스레드를 만들거나 병렬 처리를 위해 스레드 풀의 스레드를 사용합니다.

관련 문제