package Ġio . ktor . network . util Ċ Ċ import Ġio . ktor . network . sockets .* Ċ import Ġkotlinx . coroutines . experimental .* Ċ import Ġkotlinx . io . pool .* Ċ import Ġjava . nio .* Ċ Ċ val Ġio Thread Group Ġ= ĠThread Group (" io - pool - group ") Ċ Ċ private Ġval Ġcpu Count Ġ= ĠRuntime . get Runtime (). available Processors () Ċ Ċ val Ġio Coroutine Dispatcher : ĠCor outine Dispatcher Ġ= ĠIO Coroutine Dispatcher ( max Of ( 2 , Ġ( cpu Count Ġ* Ġ 2 Ġ/ Ġ 3 ))) Ċ Ċ val ĠDefault Data gram ByteBuffer Pool : ĠObject Pool < ByteBuffer > Ġ= ĠDirect ByteBuffer Pool ( MAX _ DAT AG RAM _ SIZE , Ġ 2 0 4 8 ) Ċ Ċ internal Ġclass ĠDirect ByteBuffer Pool ( val ĠbufferSize : ĠInt , Ġsize : ĠInt ) Ġ: ĠDefault Pool < ByteBuffer >( size ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġproduce Instance (): ĠByteBuffer Ġ= Ġjava . nio . ByteBuffer . allocate Direct ( buffer Size ) ĊĊĠĠĠ Ġoverride Ġfun Ġclear Instance ( instance : ĠByteBuffer ): ĠByteBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance . clear () ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate Instance ( instance : ĠByteBuffer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( instance . is Direct ) ĊĠĠĠĠĠĠĠ Ġrequire ( instance . capacity () Ġ== ĠbufferSize ) ĊĠĠĠ Ġ} Ċ } Ċ