Scala 非阻塞IO请求和将来封装的阻塞IO请求在性能上是否有任何差异?
假设使用了Play框架, 这些方法在性能方面是否有效相同Scala 非阻塞IO请求和将来封装的阻塞IO请求在性能上是否有任何差异?,scala,Scala,假设使用了Play框架, 这些方法在性能方面是否有效相同 def requestA(): Future[Response] = Future { blockingIoRequest() } def requestB(): Future[Response] = { nonBlockingIoRequest() } 我认为: 使用阻塞请求意味着在任何一个线程中,任何时候都只能有一个请求处于活动状态(因为它在等待活动时阻塞) 使用阻塞请求通常比非阻塞请求更容易(异步编程往往更复杂) 您
def requestA(): Future[Response] = Future {
blockingIoRequest()
}
def requestB(): Future[Response] = {
nonBlockingIoRequest()
}
我认为:
- 使用阻塞请求意味着在任何一个线程中,任何时候都只能有一个请求处于活动状态(因为它在等待活动时阻塞)
- 使用阻塞请求通常比非阻塞请求更容易(异步编程往往更复杂)
- 您可以为每个请求创建一个线程,但是线程有开销,并且与非阻塞解决方案相比效率极低李>
- 非阻塞请求可以处理更大数量的请求:它可以在一个进程中扩展到数十万个,但是代码变得有点复杂
- 使用阻塞请求意味着在任何一个线程中,任何时候都只能有一个请求处于活动状态(因为它在等待活动时阻塞)
- 使用阻塞请求通常比非阻塞请求更容易(异步编程往往更复杂)
- 您可以为每个请求创建一个线程,但是线程有开销,并且与非阻塞解决方案相比效率极低李>
- 非阻塞请求可以处理更大数量的请求:它可以在一个进程中扩展到数十万个,但是代码变得有点复杂
如果有帮助,请告诉我 在您描述的情况下,它更多地取决于您使用的是哪个
ExecutionContext
,然后是您调用的阻塞或非阻塞操作
基本上,如果
def requestA(): Future[Response] = Future {
blockingIoRequest()
}
您将使用相同的ExecutionContext
,该上下文在控制器(例如Action.async
处理)、过滤器
或其他请求处理位置中使用,然后是-它将影响性能,因为阻塞此类未来
执行中的线程将影响其他传入请求处理。因此,建议在另一个用于阻塞操作(如数据库访问、网络操作等)的ExecutionContext
内执行此类阻塞操作
请在文档页面查看更多详细信息:
希望这有帮助 在您描述的情况下,它更多地取决于您使用的是哪个
ExecutionContext
,然后是您调用的阻塞或非阻塞操作
基本上,如果
def requestA(): Future[Response] = Future {
blockingIoRequest()
}
您将使用相同的ExecutionContext
,该上下文在控制器(例如Action.async
处理)、过滤器
或其他请求处理位置中使用,然后是-它将影响性能,因为阻塞此类未来
执行中的线程将影响其他传入请求处理。因此,建议在另一个用于阻塞操作(如数据库访问、网络操作等)的ExecutionContext
内执行此类阻塞操作
请在文档页面查看更多详细信息:
希望这有帮助 对。阻塞线程将阻塞线程池中的一个线程(为ExecutionContext供电),而非阻塞线程则不会。是。阻塞线程将阻塞线程池中的一个线程(为ExecutionContext供电),而非阻塞线程则不会。