Обещание Эрланга о параллелизме в F # - PullRequest
4 голосов
/ 02 октября 2010

Г-н Джо Армстронг говорит, что с Erlang у нас может быть последовательный код, работающий в N раз быстрее с N ядрами.Это относится и к F # также?Или Erlang VM разработан таким образом?Управляет ли F # процессами в ОС или на языке?

Ответы [ 2 ]

10 голосов
/ 02 октября 2010

Тип MailboxProcessor в F # (см. Документы MSDN ), по сути, реализует ту же модель параллелизма на основе агентов, что и Erlang.Единственное отличие состоит в том, что Erlang больше подходит для распределенных вычислений (на нескольких компьютерах), тогда как F # использует модель программирования в основном на одной машине (но с несколькими потоками / ядрами).

В целом, я думаю, что утверждения об Эрланге также будут применяться к F #.

Относительно цитаты : я не совсем уверен, что именно автор пытается именносказать (может быть, какой-то контекст отсутствует?).Это, конечно, не означает, что вы можете взять обычную (последовательную) программу и волшебным образом запустить ее в N раз быстрее.

Однако, если вы используете модель программирования Erlang или параллелизма на основе F # agnet, то вы можете получить ускорение с каждым дополнительным ядром.Это означает, что вы будете писать программу как большое количество агентов (экземпляры MailboxProcessor в F #). Отдельные агенты написаны как последовательные подпрограммы, но вам все равно нужно думать о программировании иначе.

Технические аспекты : Эрланг не использует физические потоки ОС икак и F #, поэтому поведение должно быть примерно одинаковым.Это означает, что вы можете создать большое количество агентов (что является точкой модели программирования).Агенты в F # основаны на асинхронных рабочих процессах , которые делают это возможным.

1 голос
/ 06 октября 2010

Добавление ядер улучшит скорость вашего приложения, только если оно будет достаточно для одновременного использования, см. Закон Амдала .Правильное использование Erlang облегчает создание приложений таким способом, поскольку параллелизм прост и дешев.

...