Часы при моделировании дискретных событий


Я разрабатываю класс часов для моделирования дискретных событий. У меня уже есть события, которые проводятся в PriorityQueue и, таким образом, сортируются в соответствии с тем, какое событие имеет ближайшее время события. Однако есть одна вещь, которую я не могу понять. В статьях о дискретном моделировании событий, которые я читал, четко указано, что часы скачут от событий к событиям, и поэтому не обязательно иметь часы, которые "тикают".

Но как бы это работало, у меня есть EventScheduler класс, который содержит события в PriorityQueue. Итак, после того, как он выяснит, когда это следующее событие, могу ли я просто вызвать метод "setTime" в часах, которые EventScheduler вызывает с заданным временем следующего события? Но тогда он никогда не будет работать как часы, он просто будет продолжать прыгать к следующему событию ?

Я думал, что часы работают (тикают), а затем он знает, когда произойдет событие из EventScheduler и когда часы достигают этого времени, он обрабатывает события, обновляет состояние системы и, возможно, генерирует выходное событие.

Извините, что немного неясно, но мне просто интересны любые советы о том, как работают часы, тикают ли они, а затем только "делают" вещи, когда происходит событие, или же они просто перескакивают от события к событию?

Также есть ли какие-либо встроенные функции в java, которые вы предлагаете мне использовать для этого? Например, класс таймера

2 2

2 ответа:

Идея заключается в том, чтоНичего не происходит без входа в очередь событий. Подумайте об этом: что вы делаете с часами в то время, когда они "тикают", но нет никаких событий? Ничего. Так зачем вообще обрабатывать эти времена?

Так что да, вы просто переходите от события к событию в очереди. Действительно, "часы" в дискретном событии-это в значительной степени то, что вы построили: приоритетная очередь, отсортированная в "хронологическом" порядке, и некоторое ощущение "сейчас", которое является позицией в очереди.

Если вы выскакиваете из главной очереди, а затем "сейчас" может просто быть главой очереди, и вы закончили. Часто более сложные модели могут иметь дополнительные функции, такие как способность обнаруживать, когда события пытаются запланировать до "сейчас" - это, например, указывает на модель, которая реагирует слишком медленно: в реальном мире она всегда будет "запаздывать" и догонять то, что происходит в симуляции в целом.

Если у вас есть, например, модель, которая требует обновление каждую секунду, то вы должны поместить эти события в очередь, или они не происходят. Часто для задач, которые хорошо вписываются в модель моделирования дискретных событий (в моей карьере это было моделирование на основе физики), это не проблема: ваши модели обычно "простаивают", когда нет событий, и могут рассчитывать свое состояние в любое конкретное время в будущем, когда никакие события не изменяют свое состояние.

Если это не верно для ваших моделей, то, возможно, дискретное моделирование событий не является действительно хорошо подходит для вашей проблемной области.

Java.утиль.параллельный пакет (доступный с Java 5) помогает в создании параллельных приложений, которые могут извлекать выгоду из многоядерных систем и приложений DES. вот список элементов, предназначенных для таких приложений. http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html