Программы
Почему асинхронность – это сложно?

Почему асинхронность – это сложно?

Что не так с асинхронностью? Почему программисты и студенты так плохо её понимают?

Во многих языках программирования ныне есть изкоробочная поддержка асинхронного стиля программирования, даже специальные инструкции виртуальных машин языков для этого делаются. Однако, часто подобные упрощения и сокрытия деталей ведут к появлению "тёмных пятен" на карте понимания программистов.

Мы не будем рассматривать примеры кода в данной заметке – сравнительно скоро появится пример реализации на Си, а также в рамках стартующего курса по Python мы напишем свой event-loop.

А теперь – асинхронность. Странно, что весь мир старается как-то синхронизироваться, для чего придумывает стандарты, общие системы мер, часовые пояса, а вот программистам подай асинхронность. Опять же нет олимпийской дисциплины "асинхронное плаванье" (хотя, я бы посмотрел под поп-корн), но есть синхронное.

Да даже в технологиях стараются синхронизировать движение различных деталей – вспомните те же паровозы: все колёса объединены, чтобы двигаться одновременно и с одной частотой. И IT-не исключение – зря что ли таймеры понатыканы в различные контроллеры? Или почему частота шины фиксируется?

Нет, асинхронность – это то, с чем борются. Но, видимо, получают какой-то профит, раз всё равно пользуются...

А пользуются неблокируемостью. И это более позитивное определение: наша задача не в том, чтобы двигаться не в такт, не в том, чтобы код колбасило – не дай бог попасть в резонанс с каким-то другим процессом. Наша задача – избавиться в обработке данных от ожиданий прихода / отправки данных.

И после подобного можно получить ответ студента, который слышал что-то про асинхронность: "С асинхронностью мы можем не ждать результата выполнения операции" – один из частых вариантов интерпретации этого подхода. Нет, здорово получается: купили мы товар у продавца, он ушёл на склад за товаром, или даже создал заявку на доставку из другого города... А мы ушли дальше без товара – купить то купили, а получить и пользоваться – для слабаков!

И тут надо добавить некоторое "как мы это делаем". По сути, цели наши не поменялись: нам всё также нужно получить тот товар. И мир не изменился – товар всё также далеко. Да и логистика та же – быстрее товар не доедет от того, что мы теперь пользуемся неблокирующим подходом. Меняется лишь наше отношение к этому: мы не остаёмся ждать, мы продолжаем заниматься нашими повседневными делами, временами (или по звонку продавца) заходя в магазин, чтобы узнать: приехала посылка или нет. И чтобы продавец нас узнал – показываем квитанцию об оплате, где указана наша посылка.

Это и есть наша "событийная петля". А квитанция – промис, футур и тому подобное.

Мы не можем начать пользоваться нашей покупкой раньше. По факту, мы её получим даже чуть позже – сидя дни напролёт около прилавка, мы получим своё быстрее всего. Но сколько мы потеряем времени? А вот заглядывая на обеде в магазин, мы можем получить посылку чуть ли ни на день позже... Но при этом живём полной жизнью!

Так что эта самая "вредная" асинхронность есть и в нашей жизни. Более того, она помогает комфортнее жить, когда все стороны взаимодействия готовы к такому подходу. Именно подходу, а не технологии. А раз это подход – он применим во многих сферах!

Также может быть вам интересно:

Что не так с Училищем и почему плохо сдают Petooh

Что не так с нашим образованием? Почему даже самые простые языки становятся несдаваемыми?

Читать »

Базовые примеры использования cURL

cURL – слишком хороший инструмент разработчика HTTP-сервисов, чтобы его игнорировать. Многие проблемы можно диагностировать и продемонстрировать с помощью его.

Читать »
Фото Шаблон разработки ПО — Model View Controller (MVC)

Шаблон разработки ПО — Model View Controller (MVC)

MVC - один из самых распространённых архитектурных шаблонов разработки. Часто используется в различных фреймворках. В том числе и в Django.

Фото Что есть мотивация? Зачем мотивация тебе?

Что есть мотивация? Зачем мотивация тебе?

Говоря о руководстве командой разработчиков, сложно не впасть в эту старую как мир западню - мотивацию. Давайте сегодня постараемся понять: что есть реальная мотивация и как она помогает?

Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Маленькая книга о Go (golang)

Маленькая книга о Go (golang)

Маленькая книга о Go распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International license. Вы не должны платить за эту книгу.

Фото Как на Bash посчитать число строк в проекте (директории)

Как на Bash посчитать число строк в проекте (директории)

Ниже будет представлен однострочник, решающий данную задачу на Bash + пошаговое описание его работы.

Фото Панель администрирования Django - подключение, настройка, поиск, фильтрация

Панель администрирования Django - подключение, настройка, поиск, фильтрация

Простой способ подключить админку к сайту на Django, как сконфигурировать адмиин-панель и добавить функциональность поиска, массовых действий, как изменить оформление администраторской панели Django фреймворка.

Фото 25 января вышло новое крупное обновление Age of Empires II DE: Lords of the West

25 января вышло новое крупное обновление Age of Empires II DE: Lords of the West

Старая добрая Age of Empires II (а точнее - Definitive Edition) получила глобальное обновление. Новые кампании, новые цивилизации!

Фото Только одна из десяти компаний ожидает, что все работники вернутся в офисы

Только одна из десяти компаний ожидает, что все работники вернутся в офисы

Проведённое в США исследование показывает, что далеко не все компании ожидают возвращение к старому образу работы после пандемии.