На самом деле pmap
не подчиняется пределу «Процессоры + 2».Это результат того, как обычный макрос map
и future
работают:
future
использует пул кэшированных потоков без ограничения размера;
map
создает последовательность фрагментов, то есть последовательность, в которой всегда используется 32 элемента за раз, даже если вызывающая сторона фактически потребляет только несколько элементов в начале фрагмента.
Конечным результатом является то, что фьючерсы в pmap
запускаются параллельно в блоках по 32.
Обратите внимание, что это не является нарушением контракта, указанного в pmap
Документация.Код, с другой стороны, может привести к тому, что он полагает, что предполагается, что предел «процессоров + 2» будет соблюдаться - как если бы map
было написано наивно.На самом деле, pmap
вполне может предшествовать переходу на фрагментированные последовательности, хотя я не совсем уверен, это было давно.