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

В исследовательском документе за 2005 год он сказал

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

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

3 ответа

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


[edit: вопрос только упоминает Concurrent Haskell, но ссылка на документ, как мне кажется, "Composable Memory Transactions", документ, в котором впервые был описан Haskell STM. Пожалуйста, поправьте меня, если я ошибаюсь.]

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

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


GHC Haskell хорошо работает на мультикодах

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

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

licensed under cc by-sa 3.0 with attribution.