Является ли F # лучше, чем C # в сценариях, где требуется полный параллелизм в частях приложения? - PullRequest
7 голосов
/ 27 февраля 2009

Является ли F # лучше, чем C # в сценариях, где требуется полный параллелизм в частях приложения?

Мой основной язык - C #, и я пишу приложение, в котором основные функциональные возможности, созданные поверх приложения (C #), должны быть запланированы очень параллельными.

Лучше ли я реализовать эти классы в F #?

Ответы [ 7 ]

6 голосов
/ 27 февраля 2009

Я бы посмотрел на параллельные расширения, которые разрабатываются Microsoft .

5 голосов
/ 27 февраля 2009

Если вам просто нужно обрабатывать наборы данных параллельно, ParallelFX очень удобен. Они сделают большую боль от ручного выполнения этого в C #.

Но если в коде много асинхронного кода, асинхронная монада F # делает его намного проще, чем это можно сделать в C #. Если вы смотрите на множество BeginXXX / EndXXX или страшный код XXXAsync / XXXCompletedEvent, то F # станет серьезным выигрышем.

В противном случае, вы просто получите общий выигрыш F # над C #.

2 голосов
/ 10 апреля 2011

F # имеет много преимуществ перед C # в целом, и они играют одинаковую роль в контексте параллельного программирования, но в языке F # нет ничего, что делает его существенно более подходящим для параллельного программирования.

В частности, существует миф о том, что избегание побочных эффектов и чисто функциональное поведение - панацея от параллелизма, но это чепуха. Вы можете сделать так, чтобы чисто функциональные программы могли сжигать больше ядер, но нерешенная проблема - добиться конкурентной абсолютной производительности и ускорения на многоядерных процессорах.

Как уже говорили другие, вы почти наверняка захотите использовать библиотеку параллельных задач, которая теперь является частью .NET 4. Обратите внимание, что стандартная библиотека Visual F # 2010 включает в себя несколько функций, использующих TPL, таких как Array.Parallel.map .

2 голосов
/ 02 марта 2009

Согласно этой демонстрации Луки Болоньезе, простота реализации параллелизма является одной из сильных сторон F #. На отметке 53 минуты это становится довольно впечатляющим. Надеюсь это немного поможет. http://channel9.msdn.com/pdc2008/TL11/

2 голосов
/ 28 февраля 2009

Есть два способа сделать вещи параллельными, оба они очень хорошо работают в F #.

  • Как уже упоминал Джош, есть библиотека параллельных расширений. Это делает чрезвычайно простым распараллеливание обработки некоторых структур данных, особенно неизменяемых структур данных, которые вы часто будете использовать в F #. Таким образом, комбинирование Paraallel Extensions с F # - верный путь. Это будет обсуждаться в моей будущей реальной книге F # , посвященной , но я делаю доступным исходный код . Это описано в главе 14, и источник для него должен быть доступен в ближайшее время.

  • Для некоторых проблем вы можете использовать параллелизм передачи сообщений, который является привлекательной альтернативой разделяемой памяти. Вы можете найти информацию об этом в бесплатной главе из книги Дона Сайма . Это также будет описано в моей книге (главы 13 и 16).

  • Комбинируя параллелизм передачи сообщений с асинхронными рабочими процессами, вы можете получить отличный способ написания программ, которые не могут быть легко распараллелены с использованием параллельных расширений (то есть они должны обмениваться некоторой информацией, а также использовать асинхронные неблокирующие операции например загрузка из интернета))

1 голос
/ 27 февраля 2009

F # в основном не содержит побочных эффектов, так что да, но вы не захотите реализовывать в нем пользовательский интерфейс. С другой стороны, будет много параллельных функций, встроенных в следующую версию C # через LINQ.

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

0 голосов
/ 27 февраля 2009

F # делает некоторые подходы лучше (например, поддержка собственных сообщений), но вы можете сделать это в C #, если минимизируете (или, лучше, устраняете) изменяемое состояние.

Как отмечалось в других ответах, библиотеки .NET скоро получат большой импульс благодаря параллельным расширениям. Однако при использовании блокировок у них будет точно такой же недостаток масштабируемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...