基本上,我想知道线程是有用还是必要,或者可能更具体地说是你使用它的用途和情况。我对线程知之甚少,并且从未使用它(我主要使用C#),并且想知道如果使用它们,性能或稳定性是否有任何好处。如果有人愿意解释,我将不胜感激。
答案 0 :(得分:6)
在桌面应用程序(我的域)的世界中,线程是创建响应式用户界面的重要构造。每当需要运行时间或计算密集型操作时,在单独的线程中运行该操作几乎是必不可少的。否则,用户界面会锁定,在某些情况下,Windows将决定整个应用程序没有响应。
线程也是动画,音频和通信的重要工具。基本上,在任何情况下,您发现自己需要同时执行多项操作,这有助于使用线程。
答案 1 :(得分:1)
稳定性肯定没有收获:)。我建议你对线程有一个基本的了解,但是在你真正需要之前不要跳到任何真正的生产应用程序中使用它。你有C#所以不确定你是在建立网站还是winforms。
通常,winforms的第一个用户线程用例是当用户单击一个按钮并且你想运行一些昂贵的操作(数据库或webservice调用)时,你不希望屏幕冻结。
一个处理这种情况的好教程是look at the backgroundworker class in c#,因为这会给你一个第一口味进入这个空间然后你可以从那里去
答案 2 :(得分:1)
有一段时间我们的应用程序在新CPU上部署时会加速。而且这种加速在很大程度上是因为CPU速度(时钟)增加了很多因素。
但几年前,由于物理限制(例如散热),CPU制造商停止增加CPU时钟。相反,他们开始向CPU添加额外的内核。
现在,如果您的应用程序仅在一个线程上运行,则它无法利用完整的CPU(例如4个核心仅使用1个)。
所以今天为了充分利用CPU,我们必须努力并在多个步骤上划分任务。 对于ASP.NET,ASP.NET架构和IIS已经为我们完成了这项工作。
看这里The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
答案 3 :(得分:0)
以下是线程如何提高性能的简单示例。你有一个n号,所有这些都需要加在一起。在单线程应用程序中,需要n个时间单位才能将所有数字一起添加到最终总和中。但是,如果您将数字分成两组,则可以使用相同的操作并行运行,每个操作都有一组n / 2个数字。每个都需要n / 2个时间单位来找到它们各自的总和,然后是另外一个单位来找到全部总和。通过创建两个线程,您可以有效地将计算时间缩短一半。
答案 4 :(得分:0)
从技术上讲,在单核处理器上,没有多线程这样的东西,只是多个任务并行发生的错觉,因为每个任务都会花费很少的时间。
然而,话虽如此,如果您需要做一些需要很长时间的工作但是您希望应用程序在等待该任务完成时响应(即能够执行其他操作),则线程非常有用。一个很好的例子是GUI应用程序。
在多核/多处理器系统上,您可以让一个进程同时执行多项操作,从而显着提高性能:)