我写了一个Java程序。对于一个小的输入,在预热之后(前 50 次运行),它的运行时间变成大约 2 毫秒。
在这种情况下,如果我使用多线程版本,我们能得到什么好处吗?如果不是,那么隐藏并行执行好处的开销是什么?
我写了一个Java程序。对于一个小的输入,在预热之后(前 50 次运行),它的运行时间变成大约 2 毫秒。
在这种情况下,如果我使用多线程版本,我们能得到什么好处吗?如果不是,那么隐藏并行执行好处的开销是什么?
启动线程的开销很可能远远超过任何加速。在 Windows 上,您甚至无法可靠地测量此类快速程序的执行时间。
但是,当然,您必须问自己,您是否真的需要对运行时间为 2 毫秒的程序进行任何加速。
好吧,2ms 至少是在多个线程上拆分的候选。不断地创建/运行/终止/加入线程是一个非启动 - 无望的设计。如果向一组专用线程发送工作信号或向池发出工作,这一切都取决于完成的工作和数据组织。
如果有任何阻塞或 CPU 密集型工作可以在这 2 毫秒内有效地并行执行,那么您可以试一试。CPU 密集型工作的关键问题是有多少数据以及如何组织数据。如果要处理的数据可以很容易地分成很好的 [L1-cache-size 或更小] 块,那么您就是赢家。如果没有,请做好失望的准备。
你当然可以试试看..
Id 取决于 2ms 是否太慢。它还取决于您是否要同时运行这些任务。为什么不使用 Executor 来运行您的任务,然后您可以根据需要添加线程。