동적으로 스레드에 대한 작업을 할당하는 클래스를 설정하는 방법을 알고 싶습니다. C#을 사용하는 것이 좋습니다. 레이 트레이서 설명을 위해 [this]을 보았습니다. 그러나 이것이 어떻게 보일지에 대한 설명도 보지 못했습니다. 나는 지나치게 복잡한 것을 원하지 않습니다.C#의 스레드에 대한 동적 작업 할당
너무 많은 작업 그룹이있어 균등하게 분할하여 내 스레드에 제공 할 수 없습니다. 각 스레드에 작업의 작은 부분을 동적으로 할당 한 다음 스레드가 완료되면 그 결과를 얻고 더 많은 작업을 제공하려고합니다. 나는 몇 년 전에 비슷한 일을했지만, 그 노트를 찾거나 구글이나 여기에서 성공하지 못했다.
도움을 주시면 감사하겠습니다.
아래는 의사 코드에서의 모습입니다. 그것은 예쁘게 보이지는 않을 것입니다.하지만 제가 말하는 것에 대한 아이디어를 줄 것입니다.
TaskList = ArrayList of n tasks
ResultList = ArrayList of thread results
create x threads
integer TasksCompleted
while(TasksCompleted < TaskList.size){
thread = next available thread in pool
ResultList.add(thread.results)
tasksCompleted += thread.numOfTasks
thread.doWork(Next set of Tasks)
}
clean up threads
processResults(ResultList)
[BlockingCollection] (http://msdn.microsoft.com/en-us/library/dd267312.aspx) 또는 .Net 4.5를 사용할 수 있는지 확인하십시오. [DataFlow Pipelines] (http://msdn.microsoft.com/en-us/library/hh228604.aspx) –
[PLINQ] (http://msdn.microsoft.com/en-us/)에서보아야합니다. library/dd460688.aspx)이 정확한 시나리오를 위해 설계되었습니다. –
설명하는 내용은 스레드 풀입니다. C#은 버전 2.0 이후로 스레드 풀이 있었지만 스레드 풀 위에 빌드 된 TPL 및 기타 고급 병렬 프로그래밍 도구를 추가하여 버전 4.0에서 기능이 크게 확장되었습니다. 이들이 자신의 스레드 풀을 작성하기 전에 필요한 것을 수행 할 수 없는지 확인하십시오. – Servy