我正在寫一個相當簡單的Raytracer,並且由於該程序是單線程的,所以我遇到了運行時限制。我一直通過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
}
}
我正在看atleast 10,000個人的線程,如果天真地執行。上面的解決方案看起來不像這種情況下的最佳解決方案。有沒有支持這個標準庫的一部分,或者是否有一個Nuget包具有類似的實現?它可能也只是我的愚蠢,並且在一個List中> 10,000個線程根本不是問題。那麼問題就出現在截止時間。在某些情況下,我需要12500000個任務/線程,對於列表,我相當肯定太多了。
下面大概是我將如何創建一個新的線程/任務,因爲它現在。
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
我會嘗試添加一個示例。 –