线程示例C#

use*_*846 3 c# multithreading

我在互联网上找到了这本书.约瑟夫在C#中穿线 我试过它的例子

class ThreadTest
{
    static void Main()
    {
        Thread t = new Thread(WriteY);          // Kick off a new thread
        t.Start();                               // running WriteY()

        // Simultaneously, do something on the main thread.
        for (int i = 0; i < 10000000; i++) Console.Write("x");
        Console.ReadLine();
    }
    static void WriteY()
    {
        for (int i = 0; i < 10000000; i++) Console.Write("y");
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行这个程序时(我在for循环中给出更高的值来观察)我的cpu利用率坚持100%.我不想要这个,我的意思是,无论如何要减少使这个程序减少cpu密集度?我只是多线程概念的新手,所以我想我应该事先询问.

Fre*_*els 8

如果您可以同时使用多个资源,则多线程可以改善您的应用程序.例如,如果您有多个核心或多个CPU,我相信上面的示例应该会更好.

或者,如果您有一个使用CPU的线程,以及另一个同时使用该磁盘的线程,如果您使用多线程,它也会表现更好.

但是,如果您有一个CPU或一个单核,则上面的示例将无法更好地执行.它会表现得更糟.


Tud*_*dor 5

你无法降低利用率,因为你使用的是两个线程(很可能是在双核上),这两个线程都是工作密集型的(它们循环并打印一些东西).也许减少线程优先级可能有所帮助,但我认为这不是这个例子的重点.


Kev*_*sse 5

WriteY函数中的循环将尽快执行.所以它将使用100%的CPU.如果您希望它不那么耗费资源,那么您可以做两件事:

  • 更改线程的优先级.这样,您的应用程序仍将使用100%的CPU,但如果另一个线程需要CPU资源,该线程将"减速"

  • 在WriteY函数中添加一个暂停:

    static void WriteY()
    {
        for (int i = 0; i < 10000000; i++)
        { 
            Console.Write("y");
            Thread.Sleep(100);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)