Ответ 1
Здесь - документ, описывающий, как переключать объекты TaskSupport
в Scala 2.10.
Я смотрел новые Scala 2.9 параллельные коллекции, и я надеялся отказаться от многих моих крутых любительских версий подобных вещей. В частности, я бы хотел заменить пул объединений fork, который лежит в основе реализации по умолчанию с чем-то моим (например, что-то, что распределяет оценку задач через сеть, через участников). Я понимаю, что это просто вопрос применения парадигмы Scala "стекируемых модификаций", но библиотека коллекций достаточно запугана, что я не совсем уверен, какие биты нужно модифицировать!
Некоторые конкретные вопросы:
ForkJoinTasks
?FutureThreadPoolTasks
. Как мне создать коллекцию, которая использует эту черту вместо ForkJoinTasks
?AdaptiveWorkStealingTasks
и каким-то образом создает экземпляры коллекций, которые используют этот новый признак?(Для справки, все признаки, упомянутые выше, определены в Tasks.scala.)
Особенно примеры кода очень приветствуются!
Здесь - документ, описывающий, как переключать объекты TaskSupport
в Scala 2.10.
Просто чтобы предоставить дополнительную информацию о том, как все сочетается (что, как я подозреваю, вы уже знаете): пул fork-join "подключен" через значение parallel
объекта parallel
объекта parallel
, которое реализует scala.collection.parallel.TaskSupport
черта.
Это, в свою очередь, наследует от Tasks
(который вы упоминаете) и определяет такие операции, как:
def execute[R, Tp](fjtask: Task[R, Tp]): () => R
def executeAndWaitResult[R, Tp](task: Task[R, Tp]): R
Однако мне не сразу кажется, что вы можете переопределить поведение, которое явным образом импортируется самими коллекциями, предоставив собственную реализацию TaskSupport
. Например, в строке ParSeqLike
линии 47:
import tasksupport._
Фактически, я бы сказал, что это выглядит так: parallelism окончательно не переопределяется (если я не ошибаюсь, хотя часто бываю).