Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 对于可以并行运行的任务,是否有有效的排序算法?_Performance_Sorting_Optimization - Fatal编程技术网

Performance 对于可以并行运行的任务,是否有有效的排序算法?

Performance 对于可以并行运行的任务,是否有有效的排序算法?,performance,sorting,optimization,Performance,Sorting,Optimization,设置如下:我必须运行一定数量的任务。每项任务需要不同的时间来完成,并且有一个单独的截止日期。我最多可以并行运行N个任务(N约为10-20,但我忽略了大小对解决方案是否有任何影响)。此外,还有固定的周期性时间窗口,其中任务无法开始,并且每个并行线程都会同时执行。这意味着,如果一个任务在禁止窗口启动后结束,我可能会错过大量的工作时间,这是不可取的。如果禁用窗口即将开始,而我开始了一项短任务,也可能会发生这种情况。因此,如果两项任务都在各自的截止日期之前完成,那么在开始一项应提前完成的任务之后,才开始

设置如下:我必须运行一定数量的任务。每项任务需要不同的时间来完成,并且有一个单独的截止日期。我最多可以并行运行N个任务(N约为10-20,但我忽略了大小对解决方案是否有任何影响)。此外,还有固定的周期性时间窗口,其中任务无法开始,并且每个并行线程都会同时执行。这意味着,如果一个任务在禁止窗口启动后结束,我可能会错过大量的工作时间,这是不可取的。如果禁用窗口即将开始,而我开始了一项短任务,也可能会发生这种情况。因此,如果两项任务都在各自的截止日期之前完成,那么在开始一项应提前完成的任务之后,才开始一项应推迟完成的长期任务可能会更有效

问题是:是否有一种排序算法可以帮助我有效地解决这个问题?简言之,给定一定数量的任务要运行,每个任务都有一定的时间和期限,是否有一种有效的算法可以解决每个任务(线程和线程中的位置)从何处开始的问题?目前,让它解决100个任务和10个线程是不错的,但理想情况下,它需要具有可扩展性,最多可以解决5k个任务和大约100个线程


我主修物理,所以我对排序算法一无所知,希望你能帮我。提前谢谢

。在很多情况下(可能是大多数情况下),只要有可能就启动作业会更快,而不是花费处理器时间试图确定何时启动作业。如果运行时间过长,请尝试找到一些简单的规则来启动它们,以提供合理的优化。所有任务的运行时间是否总是给定和固定的,或者这些可能是相当大的差异?(可能会产生很大运行时差异的分支)不同任务之间是否存在依赖关系,即TaskA不能在TaskB完成之前启动?没有太多细节,为什么会有这样的禁窗?@RobertHarvey谢谢你的评论@谢谢你的回答!回答您的问题:1)任务的运行时间各不相同。这就是为什么交换任务可能更有效。也许平均值和标准偏差会有帮助?2) 任务没有任何条件。唯一的条件是,最终解决方案使所有任务按时完成,或者至少使超过截止日期的时间最小化。还有一个我没有提到的额外的小条件,但现在它会使事情变得不必要的复杂化。3) 被禁止的窗户是由后勤问题引起的。目前,它们是不可能消除的。我认为托马斯莱克所问的是“你如何知道一项任务需要多少时间?它总是需要一个固定的时间,还是可以根据任务的决定而变化?”我认为他问这个问题的原因是,如果一个特定的任务是X,你找到一个排序,使它按照你想要的方式工作,然后它需要X+1,有时它会抛出它之后的所有东西,从那时起,你的排序就不起作用了。但是,如果您知道一项任务总是需要X时间,则可以进行排序。。在很多情况下(可能是大多数情况下),只要有可能就启动作业会更快,而不是花费处理器时间试图确定何时启动作业。如果运行时间过长,请尝试找到一些简单的规则来启动它们,以提供合理的优化。所有任务的运行时间是否总是给定和固定的,或者这些可能是相当大的差异?(可能会产生很大运行时差异的分支)不同任务之间是否存在依赖关系,即TaskA不能在TaskB完成之前启动?没有太多细节,为什么会有这样的禁窗?@RobertHarvey谢谢你的评论@谢谢你的回答!回答您的问题:1)任务的运行时间各不相同。这就是为什么交换任务可能更有效。也许平均值和标准偏差会有帮助?2) 任务没有任何条件。唯一的条件是,最终解决方案使所有任务按时完成,或者至少使超过截止日期的时间最小化。还有一个我没有提到的额外的小条件,但现在它会使事情变得不必要的复杂化。3) 被禁止的窗户是由后勤问题引起的。目前,它们是不可能消除的。我认为托马斯莱克所问的是“你如何知道一项任务需要多少时间?它总是需要一个固定的时间,还是可以根据任务的决定而变化?”我认为他问这个问题的原因是,如果一个特定的任务是X,你找到一个排序,使它按照你想要的方式工作,然后它需要X+1,有时它会抛出它之后的所有东西,从那时起,你的排序就不起作用了。但是,如果您知道一项任务总是需要X时间,则可以进行排序。