Haskell 中的并发性:快速、简单、正确

作者在 C、C++和 Rust 嵌入式系统开发近十年后,开始以写 Haskell 为生。介绍了 Haskell 中用于并发编程的特性,如线程、STM 等。

  • 并发编程的关注点:计算机多核需分配工作,外界 IO 慢,需将工作拆分为独立任务,有线程和回调两种方式,回调方式虽有性能优势但调试困难。
  • Haskell 的并发方式:Haskell 结合了线程和事件驱动 IO,通过forkIO创建线程,async获取线程的 promise,wait等待线程完成,cancel取消线程等。还可用concurrently等工具处理多个线程,无需关心线程的创建和连接。
  • STM 与等待的艺术:STM(软件事务性内存)定义了特殊类型TVar等,用于实现线程间通信。通过atomically进行原子操作,可构建如可关闭队列TBCQueue等。在readTBCQueue中利用retry实现等待和关闭队列的逻辑,Haskell 运行时能跟踪事务中的TVar,避免了锁和伪唤醒等问题,解决了并发编程中的难题。同时提到 Haskell 中的异常可在线程间传递等特性。
阅读 16
0 条评论