《游戏引擎实现原理》14.2 线程池、任务队列与 Atomics 同步
从零写一个基于 worker_threads 的线程池:固定 4 个 worker、一条用 SharedArrayBuffer 装的共享环形任务队列,用 Atomics.compareExchange 做锁、Atomics.wait 挂起空闲 worker。给出 JobSystem 实现与 vitest 用例,实测 1000 个任务串行与并行的差距,以及任务太碎反而慢近 11 倍的反例。
tag
从零写一个基于 worker_threads 的线程池:固定 4 个 worker、一条用 SharedArrayBuffer 装的共享环形任务队列,用 Atomics.compareExchange 做锁、Atomics.wait 挂起空闲 worker。给出 JobSystem 实现与 vitest 用例,实测 1000 个任务串行与并行的差距,以及任务太碎反而慢近 11 倍的反例。
讲透 ThreadPoolTaskExecutor 的核心参数与队列策略(createQueue 的真实分支)、@Async 默认执行器的解析链与踩坑点,说明 SimpleAsyncTaskExecutor 为何不宜上生产,并用 TaskDecorator 与 ContextPropagatingTaskDecorator 解决 MDC 与安全上下文的跨线程丢失。
从 Future 的组合子语义与 ExecutionContext 线程池模型出发,剖析急切求值、无法取消、异常吞噬与阻塞传播四大缺陷,给出 Promise 手动完成与并发原语的实战写法,并对比结构化并发、虚拟线程与 Java 25 的 StructuredTaskScope,最后落到 Cats Effect 与 ZIO 的取舍,以及生产环境的超时、重试、熔断与监控方案。
深入 Cats Effect 3 的实现层:IO 运行时(WorkStealing 线程池/compute 与 blocking 双池)、fibers 与结构化取消(MonadCancel/取消边界)、并发原语(Ref/Deferred/Queue)、背压与限流策略、错误处理与资源安全(bracket/Resource/超时重试)、调度控制(async/cede/抢占)以及性能调优,帮助读者从「会用 IO」进阶到「理解 IO 运行时」。
讲清 @Async 的代理前提与自调用失效,说明默认 SimpleAsyncTaskExecutor 为何不能上生产,给出自定义 ThreadPoolTaskExecutor、TaskDecorator 上下文传递、有界队列与拒绝策略、CompletableFuture 异常的落地写法,并分析虚拟线程对线程池选型的影响。
C++11 的发布标志着现代 C++ 并发编程的开端。在此之前,开发者需要依赖平台特定的接口(如 POSIX pthreads 或 Windows API)来编写多线程程序,这不仅带来代码可移植性的问题,更使得并发逻辑与业务逻辑纠缠在一起。
深入 Java 并发编程,讲解 JUC 线程池、CAS 乐观锁、AQS 框架、锁升级与并发集合实战方案