Использование Актеров для использования ядер

Я новичок в Scala в целом и в Актерах в частности, и моя проблема настолько проста, что найденные мной онлайн-ресурсы не охватывают ее.

У меня есть ресурсоемкий, легко распараллеливаемый алгоритм, который будет работать на n -ядерной машине (я не знаю n ). Как мне реализовать это в Актерах, чтобы все доступные ядра решали проблему?

Первый способ, который я придумал, состоял в том, чтобы просто разбить проблему на m частей (где m - какое-то среднее число вроде 10 000) и создать m Актеров, по одному на каждую пьесу, дать каждому Актеру свою маленькую деталь и позволить им уйти.

Почему-то это показалось мне неэффективным. Миллионы Актеров просто слоняются поблизости, ожидая некоторой любви к процессору, бессмысленно переключают контексты ...

Тогда я подумал, сделать несколько меньшее количество Актеров и накормить каждого по несколько штук. Проблема заключалась в том, что нет причин ожидать, что части будут одинакового размера, поэтому одно ядро ​​могло зависнуть, многие из его задач все еще стояли в очереди, в то время как другие ядра простаивали.

Я пообщался с супервизором, который знал, какой Актеры были заняты, и в конце концов понял, что это должна быть решенная проблема. Должен существовать стандартный шаблон (возможно, даже стандартная библиотека) для решения этой очень общей проблемы. Есть предложения?

5
задан Malvolio 29 November 2010 в 20:00
поделиться