首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程化示例

线程化示例
EN

Stack Overflow用户
提问于 2011-12-19 20:24:01
回答 10查看 35.5K关注 0票数 3

我在网上找到了这本书:约瑟夫·阿尔巴哈里写的“Threading in C#”。我试过它的例子:

代码语言:javascript
复制
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");
    }
}

问题是,当我运行这个程序时(我在for循环中给出了更高的值来观察),我的CPU利用率一直保持在100%。我不想这样,我的意思是,有没有办法减少这个程序的CPU消耗?我刚开始接触多线程的概念,所以我想我应该提前问一下。

EN

回答 10

Stack Overflow用户

发布于 2011-12-19 20:29:01

如果您可以同时使用多个资源,多线程可以改进您的应用程序。例如,如果你有多个核心或多个CPU,我相信上面的例子应该表现得更好。

或者,如果您有一个使用CPU的线程,而另一个线程同时使用磁盘,那么如果您使用多线程,它的性能也会更好。

但是,如果您只有一个CPU或一个内核,那么上面的示例不会有更好的性能。它的表现会更糟。

票数 10
EN

Stack Overflow用户

发布于 2011-12-19 20:29:10

没有办法降低使用率,因为您正在使用两个线程(最有可能在双核上),这两个线程都是工作密集型的(它们循环和打印一些东西)。也许降低线程优先级会有所帮助,但我认为这不是本例的意义所在。

票数 5
EN

Stack Overflow用户

发布于 2011-12-19 20:29:24

WriteY函数中的循环将尽可能快地执行。所以它将使用100%的CPU。如果你想减少资源消耗,你可以做两件事:

  • 更改线程的优先级。这样,你的应用程序仍然会使用100%的CPU,但是如果另一个线程需要CPU资源,线程将会“减速”,
  • 在你的WriteY函数中添加一个暂停:

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8561325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档