Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 非阻塞IO请求和将来封装的阻塞IO请求在性能上是否有任何差异?_Scala - Fatal编程技术网

Scala 非阻塞IO请求和将来封装的阻塞IO请求在性能上是否有任何差异?

Scala 非阻塞IO请求和将来封装的阻塞IO请求在性能上是否有任何差异?,scala,Scala,假设使用了Play框架, 这些方法在性能方面是否有效相同 def requestA(): Future[Response] = Future { blockingIoRequest() } def requestB(): Future[Response] = { nonBlockingIoRequest() } 我认为: 使用阻塞请求意味着在任何一个线程中,任何时候都只能有一个请求处于活动状态(因为它在等待活动时阻塞) 使用阻塞请求通常比非阻塞请求更容易(异步编程往往更复杂) 您

假设使用了Play框架, 这些方法在性能方面是否有效相同

def requestA(): Future[Response] = Future {
  blockingIoRequest()
}


def requestB(): Future[Response] = {
  nonBlockingIoRequest()
}
我认为:

  • 使用阻塞请求意味着在任何一个线程中,任何时候都只能有一个请求处于活动状态(因为它在等待活动时阻塞)
  • 使用阻塞请求通常比非阻塞请求更容易(异步编程往往更复杂)
  • 您可以为每个请求创建一个线程,但是线程有开销,并且与非阻塞解决方案相比效率极低
  • 非阻塞请求可以处理更大数量的请求:它可以在一个进程中扩展到数十万个,但是代码变得有点复杂
非阻塞I/O将为您提供最佳性能(数千个请求),但代价是最难理解和正确实现

基本上,一切都归结为性能与编程复杂性

如果有帮助,请告诉我

我认为:

  • 使用阻塞请求意味着在任何一个线程中,任何时候都只能有一个请求处于活动状态(因为它在等待活动时阻塞)
  • 使用阻塞请求通常比非阻塞请求更容易(异步编程往往更复杂)
  • 您可以为每个请求创建一个线程,但是线程有开销,并且与非阻塞解决方案相比效率极低
  • 非阻塞请求可以处理更大数量的请求:它可以在一个进程中扩展到数十万个,但是代码变得有点复杂
非阻塞I/O将为您提供最佳性能(数千个请求),但代价是最难理解和正确实现

基本上,一切都归结为性能与编程复杂性


如果有帮助,请告诉我

在您描述的情况下,它更多地取决于您使用的是哪个
ExecutionContext
,然后是您调用的阻塞或非阻塞操作

基本上,如果

def requestA(): Future[Response] = Future {
  blockingIoRequest()
}
您将使用相同的
ExecutionContext
,该上下文在控制器(例如
Action.async
处理)、
过滤器
或其他请求处理位置中使用,然后是-它将影响性能,因为阻塞此类
未来
执行中的线程将影响其他传入请求处理。因此,建议在另一个用于阻塞操作(如数据库访问、网络操作等)的
ExecutionContext
内执行此类阻塞操作

请在文档页面查看更多详细信息:


希望这有帮助

在您描述的情况下,它更多地取决于您使用的是哪个
ExecutionContext
,然后是您调用的阻塞或非阻塞操作

基本上,如果

def requestA(): Future[Response] = Future {
  blockingIoRequest()
}
您将使用相同的
ExecutionContext
,该上下文在控制器(例如
Action.async
处理)、
过滤器
或其他请求处理位置中使用,然后是-它将影响性能,因为阻塞此类
未来
执行中的线程将影响其他传入请求处理。因此,建议在另一个用于阻塞操作(如数据库访问、网络操作等)的
ExecutionContext
内执行此类阻塞操作

请在文档页面查看更多详细信息:


希望这有帮助

对。阻塞线程将阻塞线程池中的一个线程(为ExecutionContext供电),而非阻塞线程则不会。是。阻塞线程将阻塞线程池中的一个线程(为ExecutionContext供电),而非阻塞线程则不会。