3

在多核机器上,java 线程调度程序的决定是相当随意的,它根据线程的创建时间、从哪个线程创建等来分配线程优先级。

这个想法是使用 pso 运行一个调整过程,该过程将随机设置线程优先级,然后最终达到最佳优先级,其中适应度函数是程序的总运行时间?

当然会有更多的参数,比如优先级会在运行期间发生变化以找到最佳优先级函数。

这个想法听起来有多实用、多有趣?和任何建议。只是一些背景知识,我已经在 java/c/c++ 中进行了几年的各种项目编程,另一种选择是在 c 中基于此创建线程调度程序,其中默认线程调度程序是操作系统。

4

2 回答 2

2

您所描述的方法是一种静态方法,即您需要多次运行该程序,然后提出一个调度解决方案,然后将您的调度信息与该程序一起发送。

问题在于,对于大多数重要程序而言,它们的性能将部分取决于它们正在使用的特定数据。即使您找到了为一个数据集调度线程的最佳方法,也绝对不能保证它会提高另一个数据集的速度。在大多数情况下,对于开发人员来说,每次他们想要发布一个新版本时运行一个漫长而艰巨的优化是不值得的,除非可能需要大量的计算工作(程序可能是手动调整而不是编写的)无论如何都是java)。

我想说自学线程调度器是个好主意,但在这里你不能把它当作一个经典的优化问题。您要么需要确保您的调度顺序将保持最佳(不太可能),要么需要找到一种在运行时有效的优化方法。这里的问题可能是调度程序的开销不会花费太多时间来破坏您可能获得的任何性能提升。

我认为这是一个有点主观的问题,但总的来说不,不认为它会起作用。

于 2010-08-06T14:58:23.663 回答
0

找出答案的最佳方法——启动一个开源项目并查看人们的使用/反应。

这对我来说听起来很有趣——但我个人并不觉得它很有用。也许我们还没有达到并发编程尽可能普遍和容易的地步。

随着函数式编程的推广,我想世界将朝着尽可能避免线程同步的方向发展(从而使线程调度对整体性能的影响更小)

从我个人的主观经验来看,软件中的大多数性能问题都可以通过改进一个占 90% 减速的瓶颈区域来解决。这个优化器可能有助于找出答案。不过,我不确定调度策略能在多大程度上提高整体性能。

不过,不要气馁!我只是凭空说话。听起来很有趣,所以为什么不直接玩呢:)

于 2010-08-06T07:36:26.540 回答