MultiThreading - 5或100个线程?

时间:2012-08-21 17:13:03

标签: c# multithreading thread-safety

我有一个双核处理器,现在让我们说我想制作一个垃圾邮件机器人程序,它会垃圾邮件,例如“嘿,你好吗?”。

我的问题是,有多少线程能够以最快的速度弹出这些消息,运行5个线程或100个线程来破坏消息? (当然,这些数字并不特殊,仅用于示例)。所有线程都将在线程安全的情况下运行。

编辑:至于以前的投票,我不是真的在写一个spambot程序,我刚刚提到它作为我的问题的一个例子,对不起的误解

2 个答案:

答案 0 :(得分:6)

理想的线程数取决于您的硬件(在这种情况下是双核处理器),以及这些线程正在做什么。如果它们是CPU密集型的,那么每个核心超过1个线程可能会减慢速度。

如果线程执行某些IO,您将通过添加线程看到性能整体提升。收益递减点完全取决于非CPU任务的性质和特定硬件。

要找到这一点,您必须测试各种线程总数。

您可以设计系统以自我调整正在使用的线程数。我曾经设计过一个系统,当总CPU负载大约为70%时,该系统运行最佳(总吞吐量最大)。为了优化该值,我添加了线程(线程之间有延迟),直到CPU达到70%,+ / - 5%。如果它超过80%,我发信号通知一个或多个线程完成他们当前的工作并终止。如果它低于60%,我逐渐添加线程。工作就像一个魅力。

答案 1 :(得分:0)

故意创建比处理器更多的线程是一种标准技术,用于利用“备用周期”,其中线程被阻塞等待某些东西,无论是I / O,互斥体还是其他东西,通过提供一些其他有用的工作要做的处​​理器。

如果您的线程正在进行I / O,那么这是加速的有力竞争者:当每个线程阻塞等待I / O时,处理器可以运行其他线程,直到它们阻塞I / O为止,希望第一个线程的数据准备就绪,等等。

来源:Anthony Williams