作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在线程池服务阻塞请求中有一个线程。
def sync = Action {
import Contexts.blockingPool
Future {
Thread.sleep(100)
}
Ok("Done")
}
custom-pool {
fork-join-executor {
parallelism-min = 1
parallelism-max = 1
}
}
最佳答案
您的测试结构不正确,无法测试您的假设。
如果你超过 this section in the docs你会看到 Play 有几个线程池/执行上下文。关于您的问题,重要的是 默认线程池 以及这与您的操作所服务的 HTTP 请求有何关系。
正如文档所述,默认线程池是默认运行所有应用程序代码的地方。 IE。所有操作代码,包括所有 Future
的(没有明确定义自己的执行上下文),将在这个执行上下文/线程池中运行。所以使用你的例子:
def sync = Action {
// *** import Contexts.blockingPool
// *** Future {
// *** Thread.sleep(100)
// ***}
Ok("Done")
}
// ***
未评论您操作中的所有代码将在默认线程池中运行。
Future
与 Thread.sleep
将被分派(dispatch)到您的自定义执行上下文 Future
完成(因为它在自己的线程池 [ Context.blockingPool
] 中运行,因此不会阻塞默认线程池上的任何线程)Ok("Done")
语句被评估并且客户端收到响应Future
完成Future
然后回复客户端。
play {
akka {
...
actor {
default-dispatcher = {
fork-join-executor {
parallelism-factor = 1.0
parallelism-max = 24
}
}
}
}
}
Future
),您将能够毫不费力地处理 1000 个请求/秒。您的
Future
但是,由于您阻塞了自定义池中的唯一线程(
blockingPool
),因此处理积压工作需要更长的时间。
object Threading {
def sync = Action {
val defaultThreadPool = Thread.currentThread().getName;
import Contexts.blockingPool
Future {
val blockingPool = Thread.currentThread().getName;
Logger.debug(s"""\t>>> Done on thread: $blockingPool""")
Thread.sleep(100)
}
Logger.debug(s"""Done on thread: $defaultThreadPool""")
Results.Ok
}
}
object Contexts {
implicit val blockingPool: ExecutionContext = Akka.system.dispatchers.lookup("blocking-pool-context")
}
Future
之后一一完成。
play {
akka {
akka.loggers = ["akka.event.Logging$DefaultLogger", "akka.event.slf4j.Slf4jLogger"]
loglevel = WARNING
actor {
default-dispatcher = {
fork-join-executor {
parallelism-min = 1
parallelism-max = 1
}
}
}
}
}
Thread.sleep
像这样的行为(以减慢默认线程池的寂寞线程速度)
...
Thread.sleep(100)
Logger.debug(s"""<<< Done on thread: $defaultThreadPool""")
Results.Ok
}
Future
。的。
关于multithreading - Play Framework : What happens when requests exceeds the available threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579030/
我是一名优秀的程序员,十分优秀!