Оглавление
Параллельный Haskell
-
Основы Concurrent Haskell
- Concurrent Haskell расширяет Haskell 98 для поддержки параллелизма.
- Основные концепции включают примитивный тип MVar и возможность создания параллельных потоков с forkIO.
-
Параллелизм и синхронизация
- Предоставляет полезные абстракции, такие как неограниченные каналы и семафоры.
- Потоки Haskell имеют низкие накладные расходы и сопоставляются с реальным количеством потоков ОС.
-
Программная транзакционная память (STM)
- Повторно использует примитивы Haskell для создания STM.
- Избегает использования MVar в пользу TVar и предоставляет примитивы retry и OrElse.
- STM monad позволяет изменять переменные в транзакциях, реализован в GHC.
-
Пример банковского приложения
- Традиционный подход к транзакциям в Haskell может привести к условиям гонки.
- Блокировки используются для предотвращения одновременного выполнения нескольких переводов.
- STM monad решает проблему гонок, обеспечивая атомарность транзакций.
-
Атомарные транзакции и STM monad
- STM monad позволяет записывать атомарные транзакции, которые полностью завершены или выглядят так, как будто не выполнялись.
- Функция atomically гарантирует, что переменные не будут изменены другими транзакциями.
- Дополнительные улучшения включают повторные попытки и проверку бизнес-логики.
-
Рекомендации
- STM monad является эффективным инструментом для обеспечения корректности сложных операций.