저는 매우 간단한 Raytracer를 작성하고 있습니다. 프로그램이 단일 스레드이기 때문에 런타임 제한이 있습니다. 내가 처리 한 2 ~ 3 가지 작업으로이 유형의 질문에 대한 답변을 Google을 통해 찾은 결과입니다.많은 양의 작업/스레드 생성 및 모두 완료하기를 기다리는 중
class Program
{
static void Main(string[] args)
{
var taskList = new List<Task>();
taskList.Add(Task.Factory.StartNew(() => doStuff()));
taskList.Add(Task.Factory.StartNew(() => doStuff()));
taskList.Add(Task.Factory.StartNew(() => doStuff()));
Task.WaitAll(taskList);
Console.WriteLine("All threads complete");
}
static void doStuff()
{
//do stuff here
}
}
순진하게 구현 된 경우 최소한 10,000 개의 개별 스레드가 있습니다. 위의 솔루션은이 시나리오에서 최적의 솔루션으로 보이지 않습니다. 표준 라이브러리에서 이것을 지원하는 부분이 있습니까? 아니면 구현 된 Nuget 패키지가 있습니까? 그것은 또한 바보 같은 짓일 수도 있습니다. List에있는 10,000 개 이상의 스레드는 전혀 문제가되지 않습니다. 그러면 문제는 컷오프가 될 때가됩니다. 어떤 경우에는 12500000 개의 작업/스레드가 필요 하겠지요. 나는 목록에 너무 많은 것을 확신합니다.
아래는 대략 새 스레드/작업을 작성하는 방법입니다. 당신은 당신이 여러 스레드를 사용하여 처리 할 값 목록 (또는 다른 IEnumerable<T>
)가있는 경우
for (var x = 0; x < image.Width; x++) {
for (var y = 0; y < image.Height; y++) {
var coordinates = new Vector3(x, y, 0);
var task = new Task(() => {
RenderSinglePixel(coordinates);
});
}
}
의 전반적인 속도를 느리게한다. –
그게 내가 생각한거야. 내 상황을 다루기위한 적절한 방법은 무엇입니까? – Herbstein
예제를 추가해 보겠습니다. –