我在互联网上找到了这本书.约瑟夫在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密集度?我只是多线程概念的新手,所以我想我应该事先询问.
如果您可以同时使用多个资源,则多线程可以改善您的应用程序.例如,如果您有多个核心或多个CPU,我相信上面的示例应该会更好.
或者,如果您有一个使用CPU的线程,以及另一个同时使用该磁盘的线程,如果您使用多线程,它也会表现更好.
但是,如果您有一个CPU或一个单核,则上面的示例将无法更好地执行.它会表现得更糟.
你无法降低利用率,因为你使用的是两个线程(很可能是在双核上),这两个线程都是工作密集型的(它们循环并打印一些东西).也许减少线程优先级可能有所帮助,但我认为这不是这个例子的重点.
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)