Совмещение асинхронного и синхронного программирования — это плохо?
На пальцах - примерно так. Есть страны с правосторонним движением, есть с левосторонним. Нормально ездят и там, и сям. Но идея замутить страну, где на некоторых улицах ездят справа, а на других слева - так себе идея.
Там, где синхронная и асинхронная парадигмы кода встречаются, возникают издержки на их стыковку. Обычно это выливается в асинхронные обёртки для синхронного кода. По неизбежности (например, при отсутствии асинхронного драйвера к бд) так и делают. Но идея так себе.
Сейчас много что в питоне создаёт иллюзию асинхронности пулом тредов. Ничего в этом удивительного нет. Если асинхронный код выполнять как синхронный (что и происходит в статье) — он будет медленней синхронного. Очевидно же, что синхронный выполняется последовательно, а асинхронным нужно управлять — постоянные свичи "контекста", сколько-то времени тратит event loop на себя, треды порождаются долго (если "асинхронность" на тредах).
Производительность не в том, что запросы должны лететь быстрее, а в том, что другой код может выполняться, пока запрос к БД висит. Потому что он висит в отдельном треде и никому не мешает (за исключением всяких edge-кейсов, которые блокируют все треды). Да, часто пула тредов может не хватать (по умолчанию это 5 * количество_ядер). Например, если ты пытаешься через aiohttp скачать 100к страниц. Но в этом случае синхронный был бы раз в 40 медленней (на 8-ядерном процессоре). И этот пул при желании можно увеличить. Но я сильно сомневаюсь, что затык будет в тредах, а не в сети.