Просто для того, чтобы предоставить больше информации о том, как все сочетается (что, я подозреваю, вы уже знаете): пул fork-join «подключается» через значение tasksupport
объекта пакета 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._
На самом деле, я бы сказал, что параллелизм окончательно не может быть переопределен (если только я не сильно ошибаюсь, хотя часто и ошибаюсь).