mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Update http4s to 0.21.4
This commit is contained in:
13
modules/common/src/main/scala/docspell/common/Pools.scala
Normal file
13
modules/common/src/main/scala/docspell/common/Pools.scala
Normal file
@ -0,0 +1,13 @@
|
||||
package docspell.common
|
||||
|
||||
import cats.effect._
|
||||
import scala.concurrent.ExecutionContext
|
||||
|
||||
/** Captures thread pools to use in an application.
|
||||
*/
|
||||
case class Pools(
|
||||
connectEC: ExecutionContext,
|
||||
httpClientEC: ExecutionContext,
|
||||
blocker: Blocker,
|
||||
restEC: ExecutionContext
|
||||
)
|
@ -4,6 +4,9 @@ import java.util.concurrent.atomic.AtomicLong
|
||||
import java.util.concurrent.{Executors, ThreadFactory}
|
||||
import cats.effect._
|
||||
import scala.concurrent._
|
||||
import java.util.concurrent.ForkJoinPool
|
||||
import java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory
|
||||
import java.util.concurrent.ForkJoinWorkerThread
|
||||
|
||||
object ThreadFactories {
|
||||
|
||||
@ -19,6 +22,18 @@ object ThreadFactories {
|
||||
}
|
||||
}
|
||||
|
||||
def ofNameFJ(prefix: String): ForkJoinWorkerThreadFactory =
|
||||
new ForkJoinWorkerThreadFactory {
|
||||
val tf = ForkJoinPool.defaultForkJoinWorkerThreadFactory
|
||||
val counter = new AtomicLong(0)
|
||||
|
||||
def newThread(pool: ForkJoinPool): ForkJoinWorkerThread = {
|
||||
val t = tf.newThread(pool)
|
||||
t.setName(s"$prefix-${counter.getAndIncrement()}")
|
||||
t
|
||||
}
|
||||
}
|
||||
|
||||
def executorResource[F[_]: Sync](
|
||||
c: => ExecutionContextExecutorService
|
||||
): Resource[F, ExecutionContextExecutorService] =
|
||||
@ -38,4 +53,19 @@ object ThreadFactories {
|
||||
executorResource(
|
||||
ExecutionContext.fromExecutorService(Executors.newFixedThreadPool(n, tf))
|
||||
)
|
||||
|
||||
def workSteal[F[_]: Sync](
|
||||
n: Int,
|
||||
tf: ForkJoinWorkerThreadFactory
|
||||
): Resource[F, ExecutionContextExecutorService] =
|
||||
executorResource(
|
||||
ExecutionContext.fromExecutorService(
|
||||
new ForkJoinPool(n, tf, null, true)
|
||||
)
|
||||
)
|
||||
|
||||
def workSteal[F[_]: Sync](
|
||||
tf: ForkJoinWorkerThreadFactory
|
||||
): Resource[F, ExecutionContextExecutorService] =
|
||||
workSteal[F](Runtime.getRuntime().availableProcessors() + 1, tf)
|
||||
}
|
||||
|
Reference in New Issue
Block a user