Существует ли неблокирующая реализация с открытым исходным кодом для актеров Scala? - PullRequest
9 голосов
/ 03 октября 2009

У меня достаточно большие файлы, с которыми мне нужно иметь дело (500Meg + zip-файлы).

Существуют ли неблокирующие реализации IO с открытым исходным кодом для актеров Scala?

Ответы [ 4 ]

6 голосов
/ 06 октября 2009

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

NIO

Java NIO в Java6 поддерживает только операции блокировки при работе с файлами. Вы можете заметить это из того факта, что FileChannel не реализует интерфейс SelectableChannel. (NIO поддерживает неблокирующий режим для сокетов, однако)

Существует спецификация NIO.2 ( JSR-203 ), предназначенная для преодоления многих текущих ограничений java.io и NIO, а также для обеспечения поддержки асинхронного ввода-вывода для файлов. Насколько я понимаю, NIO.2 должен быть выпущен с Java 7.

Это ограничения библиотеки Java, поэтому вы будете страдать от них и в Scala.

Актеры

Актеры основаны на фреймворк-форке Дуга Ли (по крайней мере, в ветке 2.7.x до версия 2.7.7 ). Одна цитата из FJTask class :

На самом деле ничто не мешает вы от блокировки в FJTask, и очень короткие ожидания / блоки полностью хорошо себя ведет Но FJTasks не являются предназначен для поддержки произвольных синхронизация, так как нет возможности приостановить и возобновить отдельные задачи как только они начали казнить. Задачи FJ также должны быть конечными в продолжительность - они не должны содержать бесконечные петли. FJTasks, которые могут необходимо выполнить блокирующее действие или удерживать замки в течение длительных периодов или цикл навсегда может вместо этого создать нормальный объекты потока Java, которые сделают это. FJTasks просто не предназначены для поддержать эти вещи.

Библиотека FJ расширена в Scala, чтобы обеспечить унифицированный способ, позволяющий актеру функционировать как поток или как задача, основанная на событиях, в зависимости от количества рабочих потоков и «активности библиотеки» (вы можете найти объяснение в техническом отчете " Актеры, которые объединяют темы и события"(Филипп Халлер и Мартин Одерский).

Решение

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

1 голос
/ 06 октября 2009

Не то, чтобы я знал, но вы, вероятно, могли бы получить много пользы, глядя на Наггати , оболочку Scala вокруг Apache Mina. Mina - это сетевая библиотека, которая использует NIO, Наггати переводит это в стиль кодирования Scala.

1 голос
/ 05 октября 2009

Здравствуйте, это вариант для вас? bigdata (R) - это масштабируемая структура хранения и вычислений, поддерживающая необязательные транзакции, очень высокий параллелизм и очень высокие совокупные скорости ввода-вывода.

http://sourceforge.net/projects/bigdata/

1 голос
/ 03 октября 2009

Вы говорите об удаленных актерах? Стандарт Actor, конечно, является сущностью внутри JVM. Боюсь, я не знаю о реализации NIO удаленных актеров.

...