Существуют ли различия в производительности между неблокирующим запросом ввода-вывода и блокирующим запросом ввода-вывода в будущем? - PullRequest
0 голосов
/ 03 марта 2020

Предположим, что используется платформа Play, являются ли эти методы одинаковыми с точки зрения производительности?

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


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

Ответы [ 2 ]

1 голос
/ 03 марта 2020

В случае, если вы описали, это зависит больше от того, какой ExecutionContext вы используете, затем от блокировки или неблокируемой операции, которую вы вызываете.

В основном, если в случае

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

вы будете использовать тот же ExecutionContext, который используется в контроллерах (например, для обработки Action.async), Filters или других местах обработки запросов, тогда да - это повлияет на производительность, поскольку блокирует поток внутри такого Future выполнения , повлияет на обработку других входящих запросов. Следовательно, рекомендуется выполнять такие операции блокировки внутри другой ExecutionContext, предназначенной для использования для операции блокировки (например, доступ к БД, сетевые операции и т. Д. c.)

Пожалуйста, ознакомьтесь с более подробной информацией на do c page: https://www.playframework.com/documentation/2.8.x/ThreadPools

Надеюсь, это поможет!

1 голос
/ 03 марта 2020

Я думаю:

  • с использованием запросов на блокировку означает, что в любой момент времени в одном потоке может быть активен только один запрос (потому что он блокируется во время ожидания активности)
  • с использованием блокировки запросы обычно проще, чем неблокирующие запросы (асинхронное программирование имеет тенденцию быть более сложным)
  • вы можете создать 1 поток на запрос, но потоки имеют накладные расходы и крайне неэффективны по сравнению с неблокирующими решениями;
  • неблокирующие запросы могут обрабатывать гораздо больший объем запросов: он может масштабироваться до сотен тысяч в одном процессе - но код становится немного сложнее

Неблокирующий ввод / вывод обеспечит наилучшую производительность (тысячи запросов) за счет того, что труднее всего понять и правильно реализовать.

В основном все сводится к производительности и сложности программирования.

Позвольте мне знаю, поможет ли это !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...