worker api 解决任务内部多线程并行问题,将单个task中可分割的i/o或cpu密集型子任务(如json解析、png压缩)拆为多个worker并发执行,提升效率且不阻塞主线程。

Gradle 的 Worker API 不是“多进程”,而是**多线程并行执行任务内部工作单元**,它让一个 Task 内部的耗时操作(比如代码生成、资源处理、静态检查)能拆成多个 worker 并发跑,不阻塞主线程,也不依赖模块间关系——这和 org.gradle.parallel=true(模块级并行)互补,但解决的是不同层级的问题。
Worker API 解决什么问题?
传统自定义 Task 通常把所有逻辑写在 doLast 里,串行执行。例如:遍历 100 个 JSON 文件生成 Java 类,默认是逐个读→解析→写文件,单线程跑完要 8 秒;用 Worker API 拆成 8 个 worker 同时处理,可能只要 1.2 秒。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
它适合:
– 批量 I/O 或 CPU 密集型子任务(如 Protobuf 编译、模板渲染、字节码增强)
– 任务逻辑可明确分割、彼此无状态依赖
– 你已用 Kotlin DSL(推荐)或较新 Groovy(Gradle 6.0+)
怎么写一个带 Worker 的 Task?(Kotlin DSL 示例)
以“批量压缩 PNG”为例:
- 定义一个可序列化的参数类(必须实现
Serializable):
abstract class CompressPngTask : DefaultTask() {
val inputFiles by project.objects.listProperty
val outputDir by project.objects.directoryProperty()
@TaskAction
fun run() {
val workQueue = project.workers.classLoaderWorker()
inputFiles.get().forEach { file ->
workQueue.submit(CompressPngWork::class) {
parameters.file.set(file)
parameters.outputDir.set(outputDir)
}
}
}
}
abstract class CompressPngWork : WorkAction
interface Parameters : WorkParameters {
val file: RegularFileProperty
val outputDir: DirectoryProperty
}
override fun execute() {
val inputFile = parameters.file.get().asFile
val outputFile = parameters.outputDir.get().file(inputFile.name).asFile
// 这里放你的压缩逻辑(独立、无共享状态)
compressWithZopfli(inputFile, outputFile)
}
}
关键配置与注意事项
- Worker 类必须是
abstract,且Parameters接口里的属性要用RegularFileProperty/DirectoryProperty等惰性类型,不能传File实例 - Worker 内部不能访问 Project、Task 或任何 Gradle 构建状态对象(如
project.logger),只能通过parameters传入必要数据 - 默认使用
classLoaderWorker(隔离类加载器,安全),也可用processWorker(真正跨进程,但开销大,极少需要) - 并发数由 Gradle 自动管理,受
org.gradle.workers.max限制(建议设为 CPU 核心数) - 务必开启构建缓存:
org.gradle.caching=true,否则每次都会重跑 worker
什么时候不用 Worker API?
如果你的任务本质是单步强依赖(比如“先编译 A → 再用 A 的 class 做字节码插桩 → 最后打包”),或者涉及全局状态(如写同一个日志文件、修改同一份内存 Map),那强行拆 worker 可能引发竞态或结果错误。这种场景更适合用标准 Task 依赖链 + --parallel 来加速模块粒度。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










