About the author


Author: https://t.me/ahillary

Resources


Channel: https://t.me/semolina_code_python

Chat: https://t.me/python_with_ahillary

YouTube: https://www.youtube.com/@semolinacode

Coding training: https://t.me/how_to_code_web3

Private group with software: https://t.me/arbuzerspublic

Проблема синхронного приложения

В синхронном приложении код исполняется последовательно. Следующая строка кода выполняется после завершения предыдущей, и в каждый момент времени происходит что-то одно. Эта модель хорошо работает для большинства приложений. Но что, если какая-то одна строка кода занимает слишком много времени? В таком случае весь последующий код должен будет замереть, пока эта строка не соблаговолит завершиться. Многие из нас раньше встречали плохо написанные пользовательские интерфейсы, в которых все поначалу шло хорошо, а потом приложение внезапно зависало, оставляя нас созерцать крутящееся колесико или ждать хоть какого-нибудь ответа.

IO Bound VS CPU Bound

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

  1. IO Bound (связанный с вводом-выводом): ввод-вывод выполняют такие устройства, как клавиатура, жесткий диск и, конечно же, сетевая карта. Такие операции ждут ввода от пользователя или получения содержимого от веб-API. В синхронном приложении мы будем ждать завершения операции и до тех пор ничего не сможем делать. Это ведет к проблемам с производительностью и отзывчивостью, поскольку в каждый момент времени может выполняться только одна длительная операция, а она не дает приложению больше ничего делать.
  2. CPU Bound (связанный с процессором): Это задачи, которые больше всего зависят от вычислительной мощности процессора. Это могут быть операции, которые требуют много вычислений, например, обработка больших объемов данных, выполнение математических вычислений и т. д. Приложение может потратить много времени на выполнение этих вычислений, что делает его медленным и менее отзывчивым.

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

Конкурентность и параллелизм