《Go 语言编程入门》10.1 goroutine 与调度直觉
TaskAPI 一直串行处理任务,一旦要定时扫描到期任务就会阻塞主流程。本节引入 goroutine:用 go 关键字把到期扫描放到后台,实测它的启动成本与内存开销,讲清主 goroutine 返回即进程结束这个经典陷阱,并给出一份后台扫描器。
tag
TaskAPI 一直串行处理任务,一旦要定时扫描到期任务就会阻塞主流程。本节引入 goroutine:用 go 关键字把到期扫描放到后台,实测它的启动成本与内存开销,讲清主 goroutine 返回即进程结束这个经典陷阱,并给出一份后台扫描器。
系统讲解 Java 并发设计模式:生产者-消费者、工作窃取、不可变对象、读写分离、双重检查锁定、Copy-on-Write、Future 承诺与线程封闭等模式,包含适用场景、代码示例、JUC 落地与实战陷阱。
Agent 天生并发:一轮可以发出多个工具调用,一个任务可以拆成多个子 Agent。本节把卷一 4.3 的线程池写法升级成 asyncio.TaskGroup 的真并发版本,演示结果按调用顺序回填而非完成顺序,再并行跑多个子 Agent 汇总,用带 sleep 的假工具实测串行与并行的墙钟差,并给出并发安全边界表。
系统梳理 Lua 的并发模型:单线程与事件循环的本质、阻塞与非阻塞 IO、单线程 worker 池架构,以及 lua-lanes、Luaproc 等多线程方案与 C 线程协作的方法,最后给出不同场景的并发选型建议。
goroutine 泄漏是 Go 服务最隐蔽的内存问题:本节实测 100 次泄漏让 goroutine 数从 1 涨到 101、讲清 channel 阻塞与 context 未取消两类根因、用 runtime.NumGoroutine 粗检,并用 go.uber.org/goleak 在测试里把它变成红灯。
用 golang.org/x/sync/errgroup 把 TaskHub 的并发收进结构化边界:首个错误自动取消其余任务、SetLimit 限制并发数、TryGo 非阻塞提交,实测失败取消与并发上限,并对比裸 WaitGroup 在错误传播上的缺口。
深入虚拟线程与结构化并发:平台线程与虚拟线程的对比、虚拟线程的创建与调度原理、StructuredTaskScope 结构化并发、与传统线程池的取舍、性能实测,以及迁移到虚拟线程时代的实战陷阱。
系统实战 ZIO 2:ZIO 类型(R/E/A)与值构造、类型化错误通道与 Either 互操作、ZEnvironment 与 ZLayer 依赖注入、fibers 并发模型(fork/join/结构化并发)、ZLayer 组合(provide/memoize/模块化)、Scope 与资源管理、Runtime/Executor 调度、与 Cats Effect 的语义对比,以及服务、测试与生产就绪的完整模式。
Elixir OTP 监督树与任务并发:Supervisor 策略(one_for_one/one_for_all/rest_for_one/simple_one_for_one)、GenServer 状态机(init/handle_call/handle_cast/handle_info)、Task 异步并发(async/await/yield)、Agent 轻量状态、DynamicSupervisor 动态子进程、Registry 进程发现、OTP 应用结构(Application 回调/规格)、错误隔离与重启强度(MaxR/MaxT)、分布式 Erlang 节点通信、与 Phoenix 的集成模式。
深入 Cats Effect 3 的实现层:IO 运行时(WorkStealing 线程池/compute 与 blocking 双池)、fibers 与结构化取消(MonadCancel/取消边界)、并发原语(Ref/Deferred/Queue)、背压与限流策略、错误处理与资源安全(bracket/Resource/超时重试)、调度控制(async/cede/抢占)以及性能调优,帮助读者从「会用 IO」进阶到「理解 IO 运行时」。
系统掌握并发与同步核心:竞态条件与临界区、原子性与可见性、互斥锁(synchronized/ReentrantLock/读写锁)、信号量与条件变量、自旋锁与乐观并发、内存模型与 volatile、无锁编程(CAS/ABA)、以及死锁/活锁/饥饿的成因与工程避免。
深入 Scala 效果系统:Cats Effect IO 与 ZIO 的 IO Monad、异步与并发原语、资源安全(bracket/Finalizer)、错误处理、依赖注入(ZLayer/Runtime),用两套主流实现落地生产级纯函数式程序。
Zig 标准库自带 HTTP 服务端与客户端。本文系统讲解 std.http.Server 的最小服务、请求解析、路由与响应、静态文件服务、并发连接处理(线程池)、结合 async/io_uring 的异步模型,以及 TLS、超时与生产部署注意点。
Scala 流处理三件套:Akka Streams(Source/Flow/Sink 图 DSL)、fs2(纯函数式流与 Effect 融合)、反压机制(推拉模型、缓冲与异步边界),覆盖错误恢复、并发流、Kafka 桥接、性能调优与流式测试。
系统覆盖 Scala/JVM 并发编程的底层与进阶:JMM 与可见性(volatile/final/synchronized)、java.util.concurrent 原子类(AtomicLong/CAS)、并发集合选型(ConcurrentHashMap/CopyOnWrite/BlockingQueue)、Scala 侧并发原语(并发集合、Future、Actor/Fiber 对比)、软件事务内存(ScalaSTM)、以及无锁数据结构的实现与陷阱,帮助读者在 Actor/效果系统之上掌握真正的并发原语。
Scala 在 JVM 上的性能调优地图:JIT 分层编译与逃逸分析、GC 选型(G1/ZGC/Shenandoah)、堆与泄漏、Scala 特有陷阱(集合/boxing/虚方法)、profiler 热点定位、fiber 并发与 JFR 可观测性。
从 POSIX socket 原语出发,系统讲解阻塞/非阻塞 I/O、select/poll/epoll 多路复用,再到 Boost.Asio 的事件驱动模型与异步操作,最终落地到半同步半异步服务端架构,为高并发 C++ 网络服务提供完整技术路径。
并发正确性不是「加个锁就行」,而是一套可证伪的形式定义。本节逐字拆解官方 Go Memory Model 文档:内存操作的四个细节、sequenced before 与 synchronized before 如何合成 happens-before、三条 Requirement 各自约束什么、data race 的精确定义,以及 DRF-SC 保证的边界。
模型一轮可以同时发出多个 tool_call。本节先看串行执行的浪费,再用 concurrent.futures.ThreadPoolExecutor 把多个工具并发跑起来,对比串行与并行的实测耗时,并给出 asyncio.gather 的等价写法,最后讲清结果如何按 tool_call_id 对齐合并回消息。
并发测试里那些 time.Sleep(100*time.Millisecond) 既慢又脆。Go 1.25 的 testing/synctest 用假时钟把「等一秒」变成「瞬间推进」。本节实测假时钟跳过一小时、Wait 观察 goroutine 阻塞态、泄漏 goroutine 直接 panic,并给出 1.24 实验版到 1.25 正式版的 API 演进。