运行 10 个并行 kotlin 批处理作业
Run 10 batch job in parallel kotlin
我有一批,它在同步方法中做了一些工作。这可能需要一些时间。为了优化,我想创建异步方法,一次并行执行 10 个批次。在 Kotlin 中可以吗?
这完全取决于你的任务类型,你想执行多个 CPU boung long 运行 任务,那么你应该选择 ExecutorService. On the other hand if you want to execute multiple async calls which are not as much CPU intensive, then you can look into kotliln coroutines
举个例子,首先使用协程需要定义你的任务,假设你有一个挂起函数,如下
suspend fun myTask(param: SomeParam)
现在你想开始并行执行10个任务,那么你就做
runBlocking { // start a coroutine it is like a thread, but very lightweight
launch(Dispatcher.Default){ myTask(param) } // launch individual coroutine for every parallel task
launch(Dispatcher.Default){ myTask(someOtherParam) }
...
launch(Dispatcher.Default){ myTask(yetAnotherParam) }
// Choose appropriate dispatcher (Main, IO or Default)
}
launch
是一个协程构建器,它在不阻塞调用线程的情况下启动协程。如果你想 return 一些结果,你也可以使用异步。
有很多选择,我建议你看看Coroutines guide
我有一批,它在同步方法中做了一些工作。这可能需要一些时间。为了优化,我想创建异步方法,一次并行执行 10 个批次。在 Kotlin 中可以吗?
这完全取决于你的任务类型,你想执行多个 CPU boung long 运行 任务,那么你应该选择 ExecutorService. On the other hand if you want to execute multiple async calls which are not as much CPU intensive, then you can look into kotliln coroutines
举个例子,首先使用协程需要定义你的任务,假设你有一个挂起函数,如下
suspend fun myTask(param: SomeParam)
现在你想开始并行执行10个任务,那么你就做
runBlocking { // start a coroutine it is like a thread, but very lightweight
launch(Dispatcher.Default){ myTask(param) } // launch individual coroutine for every parallel task
launch(Dispatcher.Default){ myTask(someOtherParam) }
...
launch(Dispatcher.Default){ myTask(yetAnotherParam) }
// Choose appropriate dispatcher (Main, IO or Default)
}
launch
是一个协程构建器,它在不阻塞调用线程的情况下启动协程。如果你想 return 一些结果,你也可以使用异步。
有很多选择,我建议你看看Coroutines guide