作者在 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 中的异常可在线程间传递等特性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。