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

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

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

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

Дальше
38 комментариев
Илья Миськов 2011

Мозг течет.

Дмитрий 2011

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

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

Игорь 2011

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

Илья Бирман 2011

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

Илья Миськов 2011

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

Павел Власов 2011

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

Leonid 2011

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

Илья Бирман 2011

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

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

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

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

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

Денис Попов 2011

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

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

Википедия сообщает нам: «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 2011

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

Leonid 2011

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

Денис Талала 2011

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

junky 2011

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

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

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

Саша Сергеев 2011

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

Эдуард 2011

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

Глеб 2011

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

Илья Бирман 2011

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

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

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

Илья Бирман 2011

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

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

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

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

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

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

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

Alex Babaev 2011

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

Илья Бирман 2011

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

Илья Клюкин 2011

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

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

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

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

Вася 2011

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

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

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

Вася 2011

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

Alex Babaev 2011

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

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

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

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

Илья Бирман 2011

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

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

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

Илья Бирман 2011

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

Alex Babaev 2011

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

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

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

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

Oleg Andreev 2011

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

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

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

Геннадий 2011

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

Kimosabe 2011

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

Вася 2011

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

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

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

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

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

Andrey Popov 2011

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

Саша Яковлев 2011

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

Артем 2011

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

Сергей К. 2011

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

Мои книги