Совершая какое-либо действие пользователь посылает запрос, на который получает соответствующий ответ. Получение этого ответа можно сказать, производится тут же, без замедления.

Это вполне обычно, для небольших сайтов, но когда дело касается больших высоконагруженных проектов, то выполнять все совершаемые действия одним разом, очень накладное дело, особенно если совершается не просто одно действие, а целая группа действий. Например, пользователь добавляет пост и после успешной записи в базу данных мы тут же отображаем ему этот пост в готовом виде. Но кроме возврата в ответе данных поста, у нас может еще быть множество других действий: уведомление в рассылке подписчиков этого пользователя о добавлении нового поста, обновление какой-то статистики и т.п. Когда у нас очень много пользователей, то это может отразиться на скорости работы приложения. Однако все эти действия не обязательно выполнять одновременно. Их можно выполнять в разное время, поделив выполнение действий на равные промежутки. Например, отправлять уведомление каждому подписчику, или группе подписчиков, через 2-10 минут, после добавление поста. Таким образом, выполнять действия тогда, когда это действительно удобно, без ущерба производительности приложения. В том числе аналогичным способом производится асинхронное выполнение действий, допустим, по какой-нибудь статистике посещений пользователей сайта. Статистика собирается в одно время, в какое-то промежуточное место хранения, а обновиться может в другое время, в часы наименьшей нагрузки на приложение. Сюда можно отнести и всякие действия по обслуживанию приложения: создание резервных копий, оптимизацию данных и т.п.

В подобных случаях важно такое понятие, как - очереди. Очереди используются для получения и выполнения задач в строгом порядке. Здесь действует принцип: первый вошел - первый вышел. Каждая задача выполняется в порядке очереди, в которой она стоит. Это очень удобно и правильно делать, особенно в почтовых рассылках.