Concurrent Haskell по-прежнему ограничен одним потоком ОС? - PullRequest
6 голосов
/ 11 августа 2010

В исследовательской работе 2005 года говорится, что

Concurrent Haskell в настоящее время реализован только для однопроцессорного процессора.Среда выполнения планирует легкий поток Haskell в пределах одного потока операционной системы.Нити Хаскелла подвешены только в четко определенных «безопасных точках»;их нельзя превалировать в произвольные моменты.

Изменилось ли это или Concurrent Haskell все еще ограничен одним потоком ОС?

Ответы [ 3 ]

18 голосов
/ 11 августа 2010

[править: в вопросе упоминается только Concurrent Haskell, но упоминается, что, как я полагаю, упоминаются «Операции с составной памятью», статья, в которой впервые был описан Haskell STM.Пожалуйста, поправьте меня, если я ошибаюсь.]

STM теперь отлично работает на нескольких ядрах.Параллельная реализация была впервые представлена ​​в GHC 6.6 и использует детальную стратегию двухфазной блокировки;то есть, чтобы зафиксировать транзакцию, реализация сначала пытается заблокировать каждую переменную, участвующую в транзакции, затем фиксирует изменения и, наконец, разблокирует все переменные.Получение блокировки не блокирует: если блокировка уже удерживается, транзакция прерывается и повторяется (это позволяет избежать обычного взаимоблокировки отмены порядка блокировки, который мог бы применяться, если блокировка была заблокирована).

Эта реализация STMконечно, не самый быстрый - в литературе описано много альтернативных методов, которые могли бы привести к лучшей производительности, но реализация GHC относительно проста и не предполагает каких-либо глобальных блокировок (транзакции, работающие с различными наборами переменных, могут выполняться параллельно без помех).

6 голосов
/ 11 августа 2010

GHC может использовать многоядерные системы для Concurrent и Parallel Haskell с 2004 года .Параллельные, параллельные, вложенные данные Parallels Haskell использует одно и то же многопоточное время выполнения.

5 голосов
/ 11 августа 2010

GHC Haskell хорошо работает на многоядерных системах

Программы GHC на Haskell, начиная с 2004 года, запускают несколько потоков на Haskell в нескольких потоках ОС, которые распределены по нескольким ядрам.

Кроме того, вы можете получить последний статус многоядерного Haskell из этого вопроса SO.

...