Подписаться на блог
В Твиттере

Реплики и ссылки на заметки

В Фейсбуке

Ссылки на заметки

Вконтакте

Ссылки на заметки

В Телеграме

Ссылки на заметки

В Тумблере

Заметки целиком

В Же-же

Заметки целиком

По РСС

Заметки целиком

Если что-то из этого не работает, напишите мне: ilyabirman@ilyabirman.ru.

Синхронное и асинхронное

По загадочным причинам, в сфере вычислительной техники слово «асинхронный» означает «синхронный». Например, «асинхронный запрос» — это когда синхронно (т. е. одновременно) с ним может выполняться другой. А вот если синхронность в выполнении отсутствует, и запросы выполняются последовательно друг за другом, то их с какого-то бодуна называют «синхронными».

Бывает, сделаешь страничку, а медленный скрипт блокирует её загрузку. Дописываешь в нужное место параметр async — и проблема решена, теперь страница и скрипт грузятся синхронно! У вас не взрывается от этого мозг?

У меня — в клочья.

Подписаться на блог
Поделиться
Поделиться
Отправить
38 комментариев
Илья Миськов

Мозг течет.

Дмитрий

Дизайнер никогда не поймет логику программиста, и наоборот.
(Ну Чикуёнок разве что)

Илья, отдельное уважение (который раз) за имя и имейл, которые всегда в полях имени и имейла сохраняются.

Игорь

Нет. Просто у программистов иная точка отсчета что называть синхронным и асинхронным

Илья Бирман

Значение слова в словаре посмотреть перед тем, как точку отсчёта устанавливать — не вариант?

Илья Миськов

Дмитрий, не понял тебя.

Павел Власов

Кто станет объяснять «почему это так и не могло быть иначе» — тот программист! А мне понравился новый взгляд на привычные вещи :)

Leonid

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

Илья Бирман

Я конечно понимаю, что одновременность — понятие относительное, но какое релятивистские эффекты имеют отношение к этому вопросу — для меня загадка.

Юрий Корчёмкин

У меня когда-то взрывался, потом я понял, что «асинхронно» проистекает из цифровой электроники и значит «не подчиняющийся генератору синхроимпульсов», и успокоился.

Виктор Глушенков

Ни от каких точек зрения или технического образования это не зависит. Синхронное исполнение музыкальных партий (к примеру) и параллельное — не одно и то же. Кому как не дискжокею это знать.
Вообще похоже на троллинг в духе «опенсоса» в день программиста))

Денис Попов

Илья, вы путаете.

Синхронные процессы — это не просто процессы, происходящие одновременно. Это ещё и процессы, каким-либо образом _связанные_ между собой, _синхронизированные_ по некоторым ключевым точкам.

Википедия сообщает нам: «In computer science, especially parallel computing, synchronization refers to the coordination of simultaneous threads or processes to complete a task; in order to obtain correct runtime order and avoid unexpected race conditions».

Аяксовый запрос нельзя проконтролировать. Есть только две точки, к которым возможно привязаться: начало запроса и его конец (успешный или неуспешный). Поэтому синхронизировать аяксовый запрос и основной процесс значит запустить аяксовый запрос, дойти в основном процессе до точки X и ждать, пока аяксовый запрос не дойдёт до точки своего окончания. Точка Х синхронизируется, оказывается одновременной с точкой окончания аяксового запроса.

А вот если отцепить аяксовый запрос, не делать никаких привязок к моменту его завершения, а только указать, чтобы он по завершению вызывал (синхронно для _себя_) некий обработчик события, тогда как основной процесс будет выполняться неизвестно с какой скоростью и неизвестно в какой точке будет находиться на момент окончания аяксового запроса — тогда это получится асинхронность, потому что процессы не синхронизированы.

quazzymodo

Часто можно видеть, что мозг у Ильи — в клочья. Вот и в этот раз тоже.

Leonid

Илья, при чем тут релятивистские эффекты? Когда ты пишешь программу, ты даешь инструкции («сделай так»), а не выражаешь пожелания («хочу так»). С точки зрения программы — «асинхронно» = «не в главном потоке», вот и все.

Денис Талала

Я не понимал, почему вместо этих слов не используют более понятные «параллельный» и «непараллельный».

junky

Видимо истина за Юрем Корчёмкиным и Денисом Талала. Суть sync и async была рождена до этих ваших долбанных высокоуровневых языков программирования, на уровне процессора, в котором есть генератор тактовой частоты. От него пляшет выполнение процесса в случае синхронизированного выполнения процессов. Асинхронность рождается там, где нет синхронизации с генератором. Так что тут проблема просто в терминологии, и куда логичней использовать слова «параллельный»/«непараллельный», причем, аналогия тут тоже из архитектуры процессора.

Александр Карпинский

На самом деле как говорит Денис Попов, речь о том, что выполнение идет не синхронно, а синхронизировано в некоторых точках. Не понятно, проблема ли это перевода, или просто утерянный где-то по пути смысл.

Саша Сергеев

Async просто браузеру говорит что ничего важного в скрипте такого нет, не жди когда он загрузится/выполнится. На самом деле это Blocking/nonblocking должно называться, Async как уже было сказано в этом месте недоучки придумали использовать, а не надо было бы (простите недоучку русского языка).

Эдуард

Верно подмечено.

Глеб

Илья, напиши про Win8 %)

Илья Бирман

Грубер всё написал.

Александр Гурьянов

«Синхронный» означет больше «зависимый», а не «одновременный». Так что правильно всё называется.

Илья Бирман

Откуда такие сведения?

Тимур Гимранов

Илья, примеры:

Ты и твой друг получаете зарплаты в один день. Если одного из вас не будет, то второй не получит зарплаты. Это параллельное получение зарплаты.

Ты и твой друг стоите в одной очередью за зарплатой. Ты впереди, друг — следующий в очереди. После того как ты получишь зарплату, твой друг её тоже получит. Это синхронное получение зарплаты.

Ты и твой друг стоите в разных очередях за зарплатой. В независимости от того, получит ли один из Вас зарплату, второй её может её получить или не получить. Это асинхронное и параллельное получение зарплаты.

Ты и твой друг работаете в разных организациях и получаете зарплаты в разных местах. Это асинхронное и непараллельное получение зарплаты.

Alex Babaev

Ты спутал синхронизацию с параллелизацией :)

Илья Бирман

Почему ты так считаешь?

Илья Клюкин

все просто и банально. Вы перепутали понятия логики и поведения.

синхронный запрос — ответ синхронизирован с запросом: т. е. пока нет ответа, запрашивающая сторона не будет выполнять дальше никаких дествий

асинхронный — запрос послан, и программа стала выполнять свои действия дальше, не дожидаясь ответа на запрос (ответ может прийти в любой момент или вообще не прийти) — т. е., грубо говоря, запрос и ответ не синхронизированы

PS и да — я программист

Вася

В случае async процессы выполняются параллельно, т. е. независимо друг от друга, т. е. асинхронно.
Что тут непонятного?

Александр Гурьянов

Достаточно посмотреть на значения «синхронного чего-то»: синхронного двигателя, синхронного плавания. В плавание на скорость все пловцы тоже плывут одновременно, но руками машут асинхронно.

Вася

Добавлю:
Те, у кого взрывает мозг, путают значения терминов «параллельный» и «синхронный». Если два процесса выполняются параллельно они не обязательно синхронны. Синхронное плавание называется так потому, что участники выполняют одни и те же действия строго одновременно. При этом если бы они делали одно и то же, но, скажем, с разной скоростью, тогда это было бы параллельное, но уже не синхронное плавание.

Alex Babaev

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

Параллельность — это когда мы берем пачку и выполняем. Никто не парится о том, что после чего, параллельность на это не влияет.

Параллельность — про выполнение. Синхронность — про то, как понимаем, что нужно следующую делать.

Аналогии есть в железе/протоколах. Есть протоколы параллельные/последовательные — IDE/SATA. Есть протоколы синхронные (есть синхросигнал и мы выдаем следующий блок данных по нему, считая, что предыдущие обработаны) и асинхронные. Когда «выдали — дождались ответа о получении — выдали дальше».

Илья Бирман

Шурик, зачем ты мне это объясняешь? Я знаю, в каком смысле используются эти термины. Мой поинт в том, что термины тупые. Нехрен последовательное называть синхронным.

Денис Киселев

Мозг сейчас уже не выносит. Видимо, привык. Поначалу, да, была некоторая путаница в том, какой вызов считать синхронным, а какой — асинхронным. Наверное, действительно надо лучше понимать низкоуровневую часть, чтобы это выглядело естественно; без этого выбор терминов и правда кажется не самым удачным (хотя, повторю, путаницы у меня уже не возникает).

Илья Бирман

У меня тоже не возникает, я запомнил, что синхронное называется асинхронным и наоборот.

Alex Babaev

Не вижу проблемы в наличии параллельной синхронной системе.

Дмитрий Пленкин

Илья, дело в том, что «синхронно» не значит «одновременно».
В технике синхронизированные процессы выполняются как угодно — и параллельно, и последовательно.
Синхронность определяется только наличием какой-то временной привязки одного процесса к другому.
В нашем случае:
1) процесс запускается строго после того как завершиться предыдущий — синхронизация на лицо;
2) процесс может запуститься в любой момент, независимо от того, завершился предыдущий или нет — асинхронная работы.

Это в бытовом смысле синхронность и одновременность тождественны, а в инженерных дисциплинах — нет.

Oleg Andreev

Я заметил, что в разговорах с коллегами мы обычно используем термины «блокирующий», «не блокирующий» и «выполняется в фоне».

Дмитрий Коздоба

Мозг остаётся на месте если под словом синхронность понимать согласованность во времени, а не одновременность исполнения.

Геннадий

«Синхронный» процесс — это когда его продвижение активизируется неким внешним импульсом. То есть, процессы синхронны с этими импульсами, а не друг с другом. Термин используется правильно.

Kimosabe

Не взрывается, все логично. Нужно лишь асинхронность воспринмать как «независимость», то есть свободу.

Вася

Из комментариев видно, что единственный человек, у которого взрывается мозг — это Илья.

Денис Киселев

Я хотел дописать то, что написали несколько комментаторов после меня: что синхронность в технических дисциплинах может означать не только одновременность, но и взаимозависимость. Т. е., указывать на то, что действия выполняются не одновременно, но в определенном порядке. К сожалению, не нашел словарных определений слова «синхронный», которые бы это подтверждали. Поэтому писать сразу не стал.

Тем не менее, не могу до конца исключать, что это не неудачный выбор термина, а просто относительно новое (или специальное) значение слова, не встречающееся в общеязыковых словарях.

Еще, мне видится некоторая неточность в правиле «наоборот», о котором вы пишете: асинхронная (загрузка страницы и скрипта) не означает, что загрузка будет производиться синхронно (в значении «одновременно») в строгом понимании: начнется она, может, и одновременно (тоже не факт), а закончится — как придется. Т. е. «асинхронность» указывает на отсутствие взаимозависимости. Хотя как эмпирическое правило оно весьма симпатично :)

Andrey Popov

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

Саша Яковлев

Я так понимаю, что «синхронное плавание» у Ильи никаких вопросов не вызывает. Чтобы отвлечься от девушек в купальниках, предположим, что вы маршируете в строю. Смысл синхронности состоит в том, что фаза, скорость и длительность ваших движений должны быть синхронизированы со всем строем. Т. е. вы, если бы шли сами по себе, могли бы, например, идти быстрее, но вынуждены идти в общем ритме. Если представить время дискретным (как в компьютере), то получается, что в каждый момент времени, вы либо догоняете, либо ждете, когда остальные вас догонят, т. е. вы все время синхронизируетесь. Тем, кому кажется, что синхронность — это параллельность, замените строй на «волну», которую создают болельщики на стадионе или, например, оркестр. Смысл не меняется, синхронность вовсе не означает параллельность, а означает согласованность. Посылка сообщения и ожидание ответа, это частный случай синхронности. Если вы запускаете параллельно две программы, работа которых никак не согласована, то тут нет синхронности.

Артем

имхо обычное некорректное использование русских словоформ (часто встречающее на самом деле явление в терминологии различных профессиональных областей, как ни странно) — «асинхронный» (несинхронный) это на самом деле «асинхронизированный» (несинхронизированный) — запрос, асинхронизированный с другим запросом — то есть выполнение одного запроса не зависит от выполнения другого. А «синхронный» подразумевает «синхронизированный» — то есть выполнение одного запроса тем или иным образом зависит от выполнения другого на единой временной шкале (греческий префикс syn- означает «вместе», «с» — и сам по себе не имеет значения единства, параллельности или какой-либо созависимости)... грубо говоря, их выполнение зависит от времени совместно, а не как попало.

Сергей К.

Ещё более странно то, что заливку песен в телефон называют «синхронизацией».

Популярное