0

所以,我怀疑在下面给出的情况下哪种方式是最优化的:

我有一个车辆在地图上沿道路行驶的模拟。移动它们没问题,它们遵守交通信号灯等。但是我的问题是,移动车辆的最有效方式是什么。现在我每条道路都有一个线程,所以一个线程沿着从南到北的道路移动车辆,另一个用于从西到东的道路等。但它不是非常优化并且非常慢。另外,我发现很难让线程跟踪汽车之间的距离,这样它们就可以放慢速度而不是相互超越。

我是否需要使用包Executor中的类有一个线程池java.util.concurrent,然后每辆车有一个线程,然后在车辆离开模拟后释放线程?或者这也会让它变慢?

因此,总而言之,如果我没有在上面说清楚,我正在尝试找到一种最佳方式来跟踪当前在模拟(地图)中的车辆。我试图让每条道路都有一个线程让车辆通过,但这不是一个好的解决方案,因为我最终需要车辆有自己的逻辑。

4

3 回答 3

2

我将为整个模拟设置一个线程。锁定开销(CPU 和编码开销)可能大于拥有多个线程的好处。

我最终需要车辆有自己的逻辑。

我会有一个方法来调用每个对象,就像move()在一个线程中重复调用所有对象一样。每辆车或物体都知道它应该如何移动。

于 2013-01-30T11:28:53.613 回答
0

最好知道你的模拟实际上做了什么,比如汽车如何决定它们去哪里、多快、什么时候停下等等。无论如何,这似乎是一个由许多汽车、道路、交通信号灯组成的大模型,等等。对于多线程,它必须得到很好的保护(锁定或同步)。您能否根据时间步长将工作拆分为工作,然后并行查看每辆车?似乎在小任务中比在线程中思考更好,因此您可以稍后选择线程数。

于 2013-01-30T18:50:38.113 回答
0

使用像Akka这样的 Actor 模型进行模拟怎么样?Actor 模型用于连续模拟(与离散事件模拟相反)。

于 2013-01-30T19:01:23.277 回答