Olekss
06/05/2018, 5:57 AMgildor
06/05/2018, 6:04 AMnumCpu - 1
threadsasync
will be run in parallel, but of course if you have only one thread both of them would be dispatch sequentially, but because there is no blocking it’s just a method callasync
is non blocking even with 1 thread both coroutines would be run in parallel in the same thread (with context switch of course) and await()
doesn’t lock threadOlekss
06/05/2018, 6:17 AMgildor
06/05/2018, 6:17 AMOlekss
06/05/2018, 6:19 AMgildor
06/05/2018, 6:19 AMdoWork
?Olekss
06/05/2018, 6:20 AMgildor
06/05/2018, 6:20 AMOlekss
06/05/2018, 6:20 AMgildor
06/05/2018, 6:21 AMOlekss
06/05/2018, 6:21 AMgildor
06/05/2018, 6:22 AMOlekss
06/05/2018, 6:22 AMgildor
06/05/2018, 6:22 AMOlekss
06/05/2018, 6:23 AMgildor
06/05/2018, 6:24 AMval ZeroMQ = newFixedThreadPoolContext(ZERO_MQ_THREAD_POOL_SIZE, "ZeroMQ")
launch {
in = inputchannel.receive
outputWorkers.forEach { async(ZeroMQ) {doWork(in)}.await()}
}
Olekss
06/05/2018, 6:24 AMgildor
06/05/2018, 6:24 AMasync will dispatch into CommonPoolNo, see my example
Olekss
06/05/2018, 6:25 AMgildor
06/05/2018, 6:26 AMOlekss
06/05/2018, 6:26 AMgildor
06/05/2018, 6:27 AMOlekss
06/05/2018, 6:27 AMgildor
06/05/2018, 6:27 AMOlekss
06/05/2018, 6:28 AMgildor
06/05/2018, 6:29 AMOlekss
06/05/2018, 6:29 AMgildor
06/05/2018, 6:33 AMoutputWorkers.forEach { async(ZeroMQ) {doWork(in)}.await()}withContext would be enough:
outputWorkers.forEach {
withContext(ZeroMQ) { doWork(in) }
}
louiscad
06/05/2018, 7:37 AMwithContext(ZeroMQ) {
outputWorkers.forEach {
doWork(it); yield()
}
}
gildor
06/05/2018, 8:19 AMlouiscad
06/05/2018, 8:35 AMgildor
06/05/2018, 8:40 AMOlekss
06/05/2018, 9:53 AMgildor
06/05/2018, 9:53 AMOlekss
06/05/2018, 9:54 AMgildor
06/05/2018, 9:55 AMOlekss
06/05/2018, 9:56 AMgildor
06/05/2018, 9:57 AMOlekss
06/06/2018, 7:13 AMgildor
06/06/2018, 7:15 AMOlekss
06/06/2018, 7:17 AMgildor
06/06/2018, 7:24 AMOlekss
06/06/2018, 7:24 AMgildor
06/06/2018, 7:25 AMOlekss
06/06/2018, 7:25 AMgildor
06/06/2018, 7:26 AMOlekss
06/06/2018, 7:26 AMgildor
06/06/2018, 7:28 AMOlekss
06/06/2018, 7:29 AMgildor
06/06/2018, 7:30 AMOlekss
06/06/2018, 7:30 AMgildor
06/06/2018, 7:31 AMOlekss
06/06/2018, 7:33 AMgildor
06/06/2018, 7:34 AMmap
for ReceiveChannel where you can pass your IO context and do some operation (even blocking) and map some values with required parallelismOlekss
06/06/2018, 7:35 AMgildor
06/06/2018, 7:35 AMOlekss
06/06/2018, 7:42 AMlouiscad
06/06/2018, 12:34 PMoutputWorkers.map {
launch(ZeroMQ) {
doWork(it)
}
}.forEach { it.join() }
gildor
06/06/2018, 2:07 PM