Зачем асинхронность?

Я понимаю, что в основном асинхронность используется для общения с сетью будь то POST или GET
но для чего ее можно использовать еще?
Особенно, когда можно столкнуться с асинхронностью в Redux?
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
sarapinit
@sarapinit
Точу водой камень
Асинхронное исполнение кода позволяет более эффективно использовать процессорное время.
Если взять синхронный сценарий исполнения, то какое-то время поток приложения загружает процессор работой, далее обычно наступает ситуация, когда поток приложения ждет завершения какой-то операции ввода\вывода. Это может быть ожидание срабатывания таймера, ожидание данных от сетевой карты, ожидание пользовательского ввода и т.п. Пока происходит ожидание поток приложения не использует процессор. В некоторых случаях это нас устраивает, если другой полезной работы мы не можем совершить. В других ситуациях мы хотим одновременно что-то делать, например иметь возможность обрабатывать клики мышкой пользователя в то время как идет запрос к БД, например.
Тогда мы задействуем асинхронный подход. В этом случае когда поток приложения доходит до ожидания окончания операции ввода\вывода, он не ждет а может быть использован для другой работы, а в момент когда закончится операция ввода\вывода и поток не будет занят другой работой, он сможет продолжить исполнение кода с того места на котором остановился.

Также есть и другое понятие асинхронности, также его называют отложенным исполнением. Это ситуация когда данные обрабатываются не во время запроса пользователя, а данные быстро буферируются на диске в БД или очереди и мы быстро отвечаем пользователю. А в этот момент асинхронный воркер циклично обрабатывает этот буфер, например уменьшает картинки, или перекодирует видео или считает какую-то агрегацию.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
WinPooh32
@WinPooh32
Stack Overflow answer searching expert
но для чего ее можно использовать еще?

Например, заваривание чая человеком:
Включаете чайник с водой. Пока вода греется, кладёте пакетик чая, сахар в кружку. Тут можно и посуду начать мыть. Когда чайник выключится, наливаете в кружку и размешиваете. Продолжаете мыть посуду.

А если делать все синхронно, то придется ждать и ничего не делать, пока нагреется чайник, потом заваривать чай и мыть посуду. Очевидно, это не эффективно.

Замените человека на поток, чайник с водой на сетевые запросы, кружку с чаем, посуду на обработку данных.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Чтобы увеличить производительность: скорость обработки данных в единицу времени.
Например, именно по этой причине, браузер загружает контент, по-возможности, асинхронно.
И строят авто-дороги в несколько полос.

Чтобы независимые процессы не ждали начала и завершения исполнения друг друга, а использовали все доступные свободные ресурсы для увеличения общей производительности.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы