线程缓慢且难以预测?

Lev*_*i H 5 .net c# multithreading

我已经创建了光线跟踪器的基础,这是我绘制场景的测试函数:

public void Trace(int start, int jump, Sphere testSphere)
{
    for (int x = start; x < scene.SceneWidth; x += jump)
    {
        for (int y = 0; y < scene.SceneHeight; y++)
        {
            Ray fired = Ray.FireThroughPixel(scene, x, y);

            if (testSphere.Intersects(fired))
                sceneRenderer.SetPixel(x, y, Color.Red);
            else sceneRenderer.SetPixel(x, y, Color.Black);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SetPixel只是在一维颜色数组中设置一个值.如果我通过直接调用它来正常调用函数它以恒定的55fps运行.如果我做:

Thread t1 = new Thread(() => Trace(0, 1, testSphere));
t1.Start();
t1.Join();
Run Code Online (Sandbox Code Playgroud)

它以50fps的速度运行,这很好并且可以理解,但是当我这样做时:

Thread t1 = new Thread(() => Trace(0, 2, testSphere));
Thread t2 = new Thread(() => Trace(1, 2, testSphere));

t1.Start();
t2.Start();

t1.Join();
t2.Join();
Run Code Online (Sandbox Code Playgroud)

它遍布整个地方,在30-40 fps之间快速移动,有时超出50或者降到20,它根本不是恒定的.为什么它比在单个线程上运行整个事情时运行速度慢?我正在运行四核i5 2500k.

CJS*_*art 0

线程通常不是渲染的最佳方式。我不知道线程内到底执行了什么,但创建线程并加入它们可能比通过并行计算赢得的时间花费更多的时间。也取决于处理器核心的数量。