package Ġit . m sec . k io Ċ Ċ import Ġit . m sec . k io . result . get Ċ import Ġit . m sec . k io . runtime . Runtime Ċ import Ġit . m sec . k io . runtime . Runtime Sus pended Ċ import Ġit . m sec . k io . runtime . Runtime Sus pended . unsafe Run Sus pended Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Ignore Ċ import Ġorg . junit . Test Ċ Ċ @ Ignore Ċ class ĠCor outine Perform ances Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` performance Ġcomparison Ġwhen Ġinside Ġcoroutine `() Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= Ġloop ( 3 2 ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 5 ) ĠRuntime . unsafe Run Sync AndGet ( program ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 5 ) Ġunsafe Run Sus pended ( program , ĠUnit ). get () ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġcoroutine Millis ) Ġ= Ġrun Sus pended AndGet Time Millis Ġ{ Ġunsafe Run Sus pended ( program , ĠUnit ). get () Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( coroutine Millis ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġno Coroutine Millis ) Ġ= Ġrun AndGet Time Millis Ġ{ ĠRuntime . unsafe Run Sync AndGet ( program ) Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( no Coroutine Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` performance Ġcomparison Ġwhen Ġoutside Ġcoroutine `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= Ġloop ( 3 2 ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 5 ) ĠRuntime . unsafe Run Sync AndGet ( program ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 5 ) ĠRuntime Sus pended . unsafe Run Sync AndGet ( program ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġcoroutine Millis ) Ġ= Ġrun AndGet Time Millis Ġ{ ĠRuntime Sus pended . unsafe Run Sync AndGet ( program ) Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( coroutine Millis ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġno Coroutine Millis ) Ġ= Ġrun AndGet Time Millis Ġ{ ĠRuntime . unsafe Run Sync AndGet ( program ) Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( no Coroutine Millis ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġloop ( n : ĠInt ): ĠU IO < Int > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ<= Ġ 1 ) Ġeffect Ġ{ Ġn Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġloop ( n Ġ- Ġ 1 ). flatMap Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop ( n Ġ- Ġ 2 ). flatMap Ġ{ Ġb Ġ-> Ġeffect Ġ{ Ġa Ġ+ Ġb Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ