В первую очередь нам стоит пройтись по терминам, которые будут использованы по ходу объяснения.
Стек (Stack) — структура данных, в которой вы имеете право обращаться только к элементу, расположенному “сверху”. Вы можете добавить элемент “наверх”.
Визуализация стека
Очередь (Queue) — структура данных, добавить в которую элемент вы можете только “в конец”, а забрать только “сначала”.
Визуализация очереди
Синхронное программирование — подход в программировании, при котором все действия выполняются одно за другим. Пока не выполнится действие_1 не начнет выполняться действие_2
Асинхронное программирование — подход в программировании, при котором действия не блокируют поток, позволяя получить результат выполнения действия_2 вне зависимости от того, выполнилось ли действие_1.