Является ли Concurrent Haskell по-прежнему ограниченным одним потоком ОС?

В исследовательской работе 2005 года было сказано

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

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

6
задан Don Stewart 22 April 2011 в 18:28
поделиться

3 ответа

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

6
ответ дан 8 December 2019 в 03:24
поделиться

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

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

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

18
ответ дан 8 December 2019 в 03:24
поделиться

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

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

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

5
ответ дан 8 December 2019 в 03:24
поделиться
Другие вопросы по тегам:

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