为什么线程优先级没有影响?

时间:2013-08-05 07:18:00

标签: c#

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread t = new Thread(() => WriteY("11"));
            t.Start();
            t.IsBackground = true;
            Thread.CurrentThread.Priority = ThreadPriority.Highest;
            for (int i = 0; i < 1000; i++) Console.Write("x");
            System.Console.ReadLine();
        }
        static void WriteY(string ss)
        {
            for (int i = 0; i < 1000; i++)
                Console.Write(ss);
            System.Console.ReadLine();
        }
    }
}

您好,我认为首先应该完成“x”线程,因为它的优先级最高。但结果是他们仍然在转换。

2 个答案:

答案 0 :(得分:2)

首先,无论优先级如何,您都无法对首次完成并行作业做出任何假设

另外,请阅读Jeff Atwood的这篇文章,了解为什么使用线程优先级是一个坏主意。

http://www.codinghorror.com/blog/2006/08/thread-priorities-are-evil.html

如果是tl; dr只有一个引用:无论你是多么出色的程序员,我几乎可以保证你不会超越在你的操作系统中编写调度程序的程序员

答案 1 :(得分:0)

如果您的PC上有多个CPU(-core)可用,这是“正常”,因为线程1在CPU /核心1上运行,而线程2在CPU /核心2上运行。
我想如果你用更多的线程重新定位相同的线程,那么可用内核或运行例如Prime95在后台使用100%的CPU应该会有所不同,但是如果&lt; = threads然后(可用)CPU / corse,调度程序将在自己的核心上运行每个线程(如果他们正在做〜他们将在同一时间完成...