Получили эти результаты с помощью приведенной ниже команды, 10 000 итераций.
.add()
взял 0s 45.2869ms
+=
взял 2s 900.2777 ms
Measure-Command -Expression {
$i = 0
$myArrayList = New-Object System.Collections.ArrayList
Do {
#$myArrayList.add($i)
$myArrayList += $i
$i++
} While ($i -lt 10000)
}
Это (долго, но очень хороший) видео дает и введение F# и востребованную демонстрацию того, как легкий это должно параллелизировать код на языке:
Как насчет MapReduce? Это невероятно parallelizable и даже при том, что это не реализовано на функциональных языках насколько бумага идет, это вдохновлено Lisp map
и reduce
.
LINQ является хорошим примером функционального программирования на основных языках. Овеществленный код и монады? В МОЕМ C#?:) Так или иначе, w.r.t. поточная обработка, существует упоминание о Параллельном LINQ. При помощи неизменности и функций высшего порядка (и Выражение, возможно), библиотеки могут параллелизировать вещи для нас.
И другая ссылка на F# с асинхронными рабочими процессами. То, что является впечатляющим, является способностью взять синхронизирующий код, и с несколькими маленькими аннотациями превращают его в асинхронный код. Код сохраняет много обязательных качеств, которые Вы могли бы использовать. Вы не должны полностью изменять вещи использовать в своих интересах это; компилятор через дескрипторы все это.
Чисто Функциональные структуры данных (длинный PDF), Chris Okasaki.
Ваш вопрос просит имущественное право в состоянии. Я думаю, что Ваше лучшее введение в это поле, с примерами, является книгой Неявное Параллельное программирование в pH Nikhil и Arvind.
Существует расширенный пример текстового индексатора/искателя с помощью mapreduce в Главе 20 ("Программирующий Многоядерные центральные процессоры") Программирования Erlang. Я не знаю, как впечатляющий то есть, но похоже, что смертные кода могут записать.
Мой учитель раньше шутил, что самым большим примером функционального кода является код, который не написан.