44. 并发模型对比:Actor、CSP 与数据并行
从共享内存并发的困境切入,系统对比 Actor 与 CSP 两大消息传递模型:讲清 Actor 的 mailbox、消息投递语义与 Erlang 监督树,拆解 CSP 的 channel、select 与 Go 调度器,再梳理数据并行(MapReduce、Fork-Join、SIMD)的适用边界,最后给出按通信拓扑与失败模型的选型准则。
tag
从共享内存并发的困境切入,系统对比 Actor 与 CSP 两大消息传递模型:讲清 Actor 的 mailbox、消息投递语义与 Erlang 监督树,拆解 CSP 的 channel、select 与 Go 调度器,再梳理数据并行(MapReduce、Fork-Join、SIMD)的适用边界,最后给出按通信拓扑与失败模型的选型准则。
深入剖析 .NET 异步与并发模型,覆盖 Task 与 ValueTask 的取舍、async 流与取消协作、同步上下文与 ConfigureAwait、Parallel 与并发集合,以及常见死锁与性能陷阱,帮助写出高吞吐且不出错的异步代码。
上一节的扫描器自己关任务,职责太杂。本节把到期任务投递进 channel 队列,讲清有缓冲与无缓冲的差别、close 之后还能不能读、谁负责关闭、select 如何同时等三路输入,并给 TaskAPI 接上第一版任务队列,为下一节的 worker pool 铺路。
深入 Clojure core.async 的并发工程实践:channel 通道模型与缓冲策略(unbuffered/buffered/dropping/sliding)、go-block 与线程池模型、背压与阻塞(alts! 多路选择)、错误传播与 try/catch 在通道内的边界、timeout 与超时编排、quit 与关闭模式、pipeline 管道流水线、线程安全与性能陷阱,以及死锁与泄漏排查,帮你用 core.async 写出可控、无死锁的异步并发程序。
深度讲解 Go Channel 的核心并发模式:Pipeline 管道流水线、Fan-Out/Fan-In 扇出扇入、Or-Done 短路合并、select 多路选路、定时器与超时控制、以及生产环境 Channel 的使用边界与常见坑。
sync.WaitGroup 是 Go 并发入门必学工具。它的职责很简单:等一组 goroutine 做完。但真实代码里,等待只是第一步。你还要拿到每个任务的结果、处理错误、控制并发数量,并保证 channel 正确关闭。很多初学者会写出“能等完,但结果偶尔丢失或死锁”的代码。
深入 Clojure 并发编程三大支柱:STM 软件事务内存(ref/dosync/alter/commute)的一致性保证、core.async CSP 通道与 go-block 的异步编排、Agent 的异步队列更新模型,附生产者-消费者模式、管道流水线、背压控制与超时策略等完整实战案例。
全面讲解Go语言中生产者-消费者模式的多种实现方式,从无缓冲到有缓冲channel,涵盖优雅关闭、背压处理和性能优化等工程实践
深入讲解 Go Channel 的底层 hchan 结构、有缓冲与无缓冲 channel 的语义差异、select 多路复用机制,以及 Fan-In、Fan-Out、Pipeline 等经典并发模式与最佳实践
Rust 异步编程全貌:async/await 语法糖背后的 Poll 模型、Tokio 运行时架构、Channel 通信模式、并发安全 trait(Send/Sync)、流处理(Stream/Sink)与背压控制、真实高并发服务器实现。
用批量处理任务讲 Go channel 流水线的基础写法,包括生产者、工作者、结果汇总、context 取消和 channel 关闭规则,以及多级流水线、背压控制和超时处理。
本文用并发抓取、超时取消和 worker 池示例讲解 Go 的 goroutine、channel、select、WaitGroup 和 context。