Асинхрнность - это когда у тебя несколько действий и их результаты будут обработаны хз в каком порядке.
Многозадачность - возможность выполнять несколько действий одновременно (начать новое не дожидаясь конца старого). При этом не факт, что реально они делаться будут параллельно
Потоки - вытесняющая многозадачность. Хз как ты будешь переключаться между одновременными действиями. Иногда, если позволяет ситуация - вообще делать одновременно (параллельно, когда несколько ядер, Гил отпущен и т.п.)
asyncio (асинхронность на корутинах) - кооперативная многозадачность, ты запускаешь какие-то внешние действия и можешь на время ожидания сказать питону переключиться на другой твой код.
Асинхрнность на колбэках - запускаешь действие и говоришь какую функцию вызвать когда оно кончится.