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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать »

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

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

Читать »
Фото Python: Встроенные типы данных (list, set, dict, etc)

Python: Встроенные типы данных (list, set, dict, etc)

В Python есть множество встроенных типов данных. Их использование значительно упрощает жизнь и ускоряет разработку программных продуктов.

Фото Python: типы данных, переменные, логическое ветвление и циклы

Python: типы данных, переменные, логическое ветвление и циклы

Первая часть заметок о Python. О базовых типах, переменных, ветвлении и циклах.

Фото Как сделать свою middleware в Django (с примерами)

Как сделать свою middleware в Django (с примерами)

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

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

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

Фото Добавляем постраничную пагинацию на Django сайт

Добавляем постраничную пагинацию на Django сайт

На сайтах часто встречаются многостраничные объекты: список товаров, список заметок и т.д. Поэтому важно уметь добавить навигацию по страницам на Django-проекте.

Фото Нет слов, одни... однострочники

Нет слов, одни... однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!