Улучшает ли sync_to_async производительность ORM-запросов в django?

Наверное, это очень простой вопрос, но после прочтения большого количества документации и советов я так и не понял его сути.

За исключением всех внешних вещей, таких как промежуточное ПО и тип SGI, если мое представление состоит только из запроса к базе данных и синхронного кода для работы с полученными данными, даст ли использование async def и sync_to_async для ORM запросов какой-либо прирост производительности? Поскольку на данный момент ORM-запросы все еще синхронны.

async def myview(request):
    users = await sync_to_async(list)(User.objects.all())
    ...

vs

def myview(request):
    users = list(User.objects.all())
    ...

async/await (в целом, как понятие) не дает лучшей производительности для данного конкретного запроса. Что он делает, так это освобождает основной процесс выполнения для выполнения другого кода и возвращается к нему только после завершения операции.

Есть 2 основных случая, когда это увеличивает производительность:

  • в случае (предполагаемых) однопоточных языков, таких как Python, JS, Ruby и т.д. Сервер приложений может выполнять несколько запросов в секунду, так как он не ждет внешних вызовов (БД, API...), ничего не делая.
  • в случае, если вашему коду нужно выполнить несколько независимых вызовов, чтобы один не ждал другого. Например, вы хотите создать 20 элементов, но API доступен только для каждого элемента, поэтому вы можете вызвать все 20 сразу, используя async, а не по одному
  • .
Вернуться на верх