连续循环会导致线程问题吗?

时间:2011-12-23 09:12:01

标签: c# multithreading

我有一个运行很多线程的应用程序。这是我第一次尝试使用多线程应用程序并且它不使用线程池,我只是生成自己的线程。它们运行的​​方法无限循环。这会引起问题吗?我问的原因是我的应用似乎运行良好大约10分钟,然后几乎完全停止。任何提示赞赏。欢呼声。

编辑:我只是添加一些信息。该应用是一个帐户创建者。我希望它能够始终运行100多个线程。线程不停地运行并且不会一直被创建,它们只创建一次然后它们应该创建帐户直到我关闭程序。

5 个答案:

答案 0 :(得分:2)

非常仔细地阅读此threading in C#,这是我认为最好的线程资源之一。建议不要旋转处理器,因为它会浪费CPU资源。最好在不需要做任何工作时阻塞线程,并在需要对信号进行操作时唤醒。

答案 1 :(得分:0)

如果你使用的是.net 4.0,你应该看一下使用任务并行库:

http://msdn.microsoft.com/en-us/library/dd460717.aspx

MS在这里做了很多艰苦的工作(线程池等),这可以帮助你避免一些常见的线程问题。

对于你自己的问题,你确定你没有锁定某些内容然后并不总是在你的循环中移除锁吗?

答案 2 :(得分:0)

技术上无限循环不会导致问题,在大多数情况下,这不是最好的设计实践。使用您的方法,您需要确保不会发生内存泄漏并正确处理对象。

答案 3 :(得分:0)

是的,如果你创建没有绑定的线程,它可能会导致很多问题。

  1. 操作系统可以有效调度并由CPU执行的线程数有限制。对于CPU绑定操作,一个好的经验法则是保持线程数接近CPU核心数。
  2. 不断创建和销毁线程会导致大量不必要的开销,尤其是对于短期操作。线程池是降低这些成本的最佳方法。
  3. 如果你创建了太多的线程,你最终会耗尽堆栈空间,你的程序就会崩溃。即使在此之前,您可能最终会使用太多系统资源并减慢计算机上的其他任务。

答案 4 :(得分:0)

循环和循环..许多线程被设计为在应用程序的生命周期内无限循环。正如其他海报所解释的那样,除了旋转等待之外什么都不做的CPU循环是不必要和浪费的。执行有用工作的循环和包含阻塞调用的循环,例如。在I / O或生产者 - 消费者队列上,就好了 - 让他们为整个应用程序运行做好自己的工作。

再次使用其他海报,请查看池等。连续创建/终止/销毁线程非常昂贵且容易出错。