Что функциональные реализации языка позволяют потокам выполнять параллельно?

Строки комментариев / Строки кода

value > 1 -> bad (too many comments)

value < 0.1 -> bad (not enough comments)

Корректируют числовые значения согласно Вашему собственному опыту;-)

5
задан Jon Harrop 12 July 2009 в 21:30
поделиться

7 ответов

Я рад сообщить вам, что вы правы и что F #, основанный на CLR, вообще не страдает от этого ограничения, а вместо этого получает преимущества от определенных функций многопоточности, включая асинхронные рабочие процессы , процессор почтовых ящиков и замечательная будущая параллельная библиотека задач (.NET 4.0).

5
ответ дан 18 December 2019 в 05:23
поделиться

Есть несколько хороших реализаций. В настоящий момент люди, работающие с Haskell, похоже, получают наилучшие результаты (см. документ ICFP 2009 Саймона Марлоу и других , а также доклад Донни Джонса и других на симпозиуме Haskell 2009)). Erlang довольно близко отстает, особенно если вы хотите распространять.

Через шесть-двенадцать месяцев ответы могут измениться: -)

11
ответ дан 18 December 2019 в 05:23
поделиться

И Scala, и Clojure работают на JVM, что обеспечивает реальный параллелизм без единой точки узких мест.

6
ответ дан 18 December 2019 в 05:23
поделиться

Erlang реализует свои собственные процессы и расписание процессов и позволяет выполнять тысячи, десятки тысяч и даже миллионы процессов Erlang (внутри одного процесса операционной системы).

В SMP и многоядерных машинах Виртуальная машина Erlang будет выделять столько же потоков ОС и процессов ОС своему планировщику процессов и очереди процессов, чтобы максимально использовать лежащие в основе параллельные операции в аппаратной архитектуре.

Парадигма параллелизма, открытая для приложений, конечно, остается той же.

6
ответ дан 18 December 2019 в 05:23
поделиться

В дополнение к Haskell вы можете одновременно запускать процессы в Erlang (программирование, ориентированное на параллелизм) и вы также можете сделать это в F #, используя .NET Parallel Extensions и Асинхронные рабочие процессы .

3
ответ дан 18 December 2019 в 05:23
поделиться

python не является особенно функциональным языком, и с GIL он тоже не очень параллелен, но в сочетании с модулем multiprocessing (стандартным с версии 2.6) вы получаете и то и другое, но это не так элегантно, как чисто функциональные языки.

Краткий пример:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    pool = Pool(processes=4)              # start 4 worker processes
    result = pool.apply_async(f, [10])     # evaluate "f(10)" asynchronously
    print result.get(timeout=1)           # prints "100" unless your computer is *very* slow
    print pool.map(f, range(10))          # prints "[0, 1, 4,..., 81]"
0
ответ дан 18 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: