我有一个表示当前状态对象“cell”列表。
list
列表
我知道并行解决一个问题总是需要一个开销。在这种情况下,它在我的循环中加速。你能推荐什么方法来加速我的循环?
如果我将numberOfThreads从1更改为12(我最多有12个处理器),速度似乎不会有任何差别。我的循环的代码是:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import view.ConsolePrinter;
public class Engine implements Runnable {
private int numberOfThreads = 8;
private boolean shouldRun = false;
private ExecutorService taskExecutor;
private Thread loopThread;
private List<Cell> cells;
private World world;
private int numberOfRunningTimeSteps = 0;
private int FPS = 30;
private double averageFPS;
public Engine(List<Cell> cells, World world) {
this.cells = cells;
taskExecutor = Executors.newFixedThreadPool(numberOfThreads);
this.world = world;
}
@Override
public void run() {
world.resetTime();
shouldRun = true;
long startTime;
long estimatedTimeMillis;
long waitTime;
long totalTime = 0;
long targetTime = 1000 / FPS;
int frameCount = 0;
int maxFrameCount = 1;
while (shouldRun) {
startTime = System.nanoTime();
try {
List<Future<Cell>> futures = taskExecutor.invokeAll(cells);
List<Cell> futureCells = new ArrayList<Cell>();
futures.forEach((future) -> {
try {
futureCells.add(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
world.setCells(futureCells);
} catch (InterruptedException e) {
e.printStackTrace();
}
world.timeProceeded();
if (numberOfRunningTimeSteps != 0 && world.getTime() == numberOfRunningTimeSteps) {
shouldRun = false;
}
estimatedTimeMillis = (System.nanoTime() - startTime) / 1000000;
waitTime = targetTime - estimatedTimeMillis;
try {
if (waitTime > 0.0) {
Thread.sleep(waitTime);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
totalTime += System.nanoTime() - startTime;
frameCount++;
if (frameCount == maxFrameCount) {
averageFPS = 1000.0 / ((totalTime / frameCount) / 1000000);
frameCount = 0;
totalTime = 0;
}
}
}
public void start(int n) {
loopThread = new Thread(this);
loopThread.start();
numberOfRunningTimeSteps = n;
}
public void stop() {
shouldRun = false;
}
}
我们有任务需要安排处理。每个任务由两部分组成,需要按顺序执行。第一个任务由互斥锁保护,因此一次只能执行一个任务。第二部分没有这样的约束,任何数量的任务都可以同时执行。对于任务,我们知道它需要在每个部分花费多少时间,即mi用于受保护的部分,ai用于可以并行执行的部分。 问题是找到任务的排列,以便最小化执行所有任务所需的时间。 我的直觉告诉我,这可以通过贪婪算法来解决,方法是按i的降序安排任务。 例如
我正在将阻塞顺序编排框架转换为反应式。现在,这些任务是动态的,并通过JSON输入输入到引擎中。引擎提取类并执行方法,并使用每个任务的响应保存状态 如何在Reactor中实现相同的链接?如果这是一个静态DAG,我会将它与或操作符链接起来,但由于它是动态的,我如何继续执行反应性任务并收集每个任务的输出? 示例: 非反应性接口: 核心发动机 按照上面的示例,如果我将任务转换为返回Mono 更新:: 反应
在一个私人开源项目中,我遇到了以下问题: 有各种各样的任务要执行。其中一些任务将具有 它们必须在一个或多个特定的其他任务之后执行 它们必须在一个或多个特定的其他任务之前执行 我在寻找一个简单的算法,如何利用这些信息构建一个有向图,然后可以用于周期检测,并以一个允许尊重所有这些条件的顺序执行所有任务。 问:什么是构建这样一个图的有效、好的方法? 谢谢你的帮助。 注意:很明显,我们需要在图中增加两个节
问题内容: 我想找到更快的:结构与数组。因此,我编写了一个GO代码,在其中我将4个int值(1、2、3和4)写入一个结构的成员,然后写入一个长度为4的数组。我试图找出写入所需的时间。 案例1:首先,我将值写入结构,然后写入数组。在这里,我发现数组比结构要快。 情况2:其次,我将值写入数组,然后写入结构。在这里,我发现结构比数组要快。 为什么性能取决于我首先写的内容?我首先写的那个似乎慢一些。为
我有一个数据流,其中事件的顺序很重要。时间特性设置为EventTime,因为传入记录中有时间戳。 为了保证排序,我将程序的并行度设置为1。当我的程序变得更复杂时,这会成为性能方面的问题吗? 如果我理解正确的话,我需要给我的事件分配水印,如果我想让流按时间戳排序的话。这很简单。但我读到即使这样也不能保证秩序?稍后,我想对那个流进行有状态计算。因此,为此我使用了一个FlatMap函数,它需要对流进行键
问题内容: 我已经搜索了很多,但是找不到任何解决方案。我以这种方式使用Java线程池: 以这种方式,任务以随后的顺序执行(如在队列中)。但是我需要更改“选择下一个任务”策略。所以我想为每个任务分配优先级(不是线程优先级),并执行与这些优先级相对应的任务。因此,当执行者完成另一个任务时,它将选择下一个任务作为具有最高优先级的任务。它描述了常见问题。也许有一种更简单的方法没有说明优先级。它选择上一个添