Миграция от параллелизма Java до параллелизма Scala

WAV-файлы (по крайней мере, несжатые) довольно просты. Там есть заголовок, затем данные следуют за ним.

Вот отличная ссылка: https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ strike> ( зеркало )

6
задан oxbow_lakes 5 June 2009 в 08:48
поделиться

2 ответа

Какой механизм я бы использовал для планирования рабочего элемента на определенное время?

Я бы использовал службу java.util.concurrent.ScheduledExecutorService.

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

Это мне кажется идеей, которая сводит на нет усилия по распараллеливанию. Попробуйте минимизировать или исключить блокировку и глобальное состояние. Это препятствия для компоновки и масштабируемости. Например, рассмотрите возможность наличия одного выделенного потока, который ожидает прибытия файлов, а затем запускает события для субъектов. Или посмотрите на java.nio асинхронный неблокирующий ввод-вывод.

Я не совсем понимаю ваши требования, но похоже, что у вас может быть один поток / субъект, ищущий события ввода-вывода. Затем в качестве запланированных «рабочих элементов» запланируйте эффекты, которые создают неблокирующие субъекты. Эти субъекты должны регистрироваться в потоке / субъекте ввода-вывода, чтобы получать сообщения о событиях ввода-вывода, которые им важны.

Как я могу вызвать отмену ранее запланированного рабочего элемента?

ScheduledExecutorService возвращает Фьючерсы. У вас неплохой дизайн в этом отношении. Соберите их на карту и вызовите future.cancel ().

5
ответ дан 17 December 2019 в 02:33
поделиться

У вас может быть актор планирования, который имеет список запланированных субъектов и использует Actor.receiveWithin () для просыпаться каждую секунду или около того и отправлять сообщения акторам, которые готовы к выполнению. Актер планирования также может обрабатывать отмену. Другой вариант - позволить каждому субъекту управлять своим расписанием напрямую с помощью receiveWithin (), вместо централизованного планирования.

В сообщении блога есть обсуждение этого вопроса в простом планировщике, подобном cron, в Scala . 1113381]

1
ответ дан 17 December 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: