我有一个双核处理器,现在假设我想制作一个垃圾邮件机器人程序,它会发送诸如“嘿,你好吗?”之类的垃圾邮件。
我的问题是,多少线程能够最快地弹出这些消息,运行 5 个线程或 100 个线程来阻止消息?(当然,这些数字并不特殊,仅作为示例)。所有线程都将以线程安全的方式运行。
编辑:至于之前的反对票,我并不是真的在写垃圾邮件程序,我只是提到它作为我的问题的一个例子,很抱歉造成误解
我有一个双核处理器,现在假设我想制作一个垃圾邮件机器人程序,它会发送诸如“嘿,你好吗?”之类的垃圾邮件。
我的问题是,多少线程能够最快地弹出这些消息,运行 5 个线程或 100 个线程来阻止消息?(当然,这些数字并不特殊,仅作为示例)。所有线程都将以线程安全的方式运行。
编辑:至于之前的反对票,我并不是真的在写垃圾邮件程序,我只是提到它作为我的问题的一个例子,很抱歉造成误解
理想的线程数取决于您的硬件(在本例中为双核处理器),以及这些线程在做什么。如果它们是 CPU 密集型的,每个核心超过 1 个线程可能会减慢速度。
如果线程执行一些 IO,您将看到通过添加线程来整体提高性能。收益递减点完全取决于非 CPU 任务的性质和特定硬件。
要找到这一点,您必须测试各种线程总数。
您可以设计您的系统以自我调整正在使用的线程数。我曾经设计过一个在总 CPU 负载约为 70% 时运行最好(总吞吐量最高)的系统。为了优化该值,我添加了线程(线程之间有延迟),直到 CPU 达到 70%,+/- 5%。如果它超过 80%,我会通知一个或多个线程来完成它们当前的工作并终止。如果低于 60%,我会逐渐添加线程。像魅力一样工作。
故意创建比处理器更多的线程是一种标准技术,用于利用“空闲周期”,其中线程被阻塞等待某些东西,无论是 I/O、互斥体还是其他东西,通过为处理器提供一些其他有用的工作来完成做。
如果您的线程正在执行 I/O,那么这是加速的有力竞争者:当每个线程阻塞等待 I/O 时,处理器可以运行其他线程,直到它们也阻塞 I/O,希望这样第一个线程的数据准备就绪的时间,依此类推。
资料来源:安东尼威廉姆斯