Асинхронные и синхронные условия
Меня смущает термин асинхронный, когда он связан с программированием. По-видимому, в терминах программирования это означает, что оно определено как в словаре. Например, слово синхронный означает:
Тем не менее, Wikipedia говорит:
"В программировании события асинхронные - это те, которые происходят независимо от основного потока программы. Асинхронные действия действия, выполняемые в неблокирующей схеме, позволяющие основной программе поток для продолжения обработки."
Не будет ли что-то "неблокирующимся" и которое позволяет "основной поток программы продолжать обработку", синхронизироваться или "возникать одновременно"? Похоже, что термин синхронный предполагает "неблокирующее" и асинхронное "блокирование". Почему термины, по-видимому, используются в обратном направлении, когда они связаны с программированием, или это имеет какое-то отношение к вычислениям нижнего уровня, которые я не понимаю?
Когда я использую синхронный вызов AJAX, я делаю следующее...
$.ajax({
url: somefile.php,
async: false,
success: {
...code that gets run on success...
}
});
...code that gets run after the ajax-success code runs...
При этом он фактически ожидает ответа перед запуском остальной части script, это действие блокировки. Тогда почему это называется синхронным, когда оно не синхронизируется с каким-либо другим процессом, а наоборот?
Ответы
Ответ 1
Действительно, это один из этих случаев, когда исходный смысл слова был искажен и означает нечто иное, чем в популярном использовании.
"Синхронизация" в телекоммуникации означает, что приемник сигнализирует всякий раз, когда он готов принимать сообщения, и только после этого сигнала передатчик начнет передачу. Когда передатчик будет выполнен с сообщением, он будет сигнализировать о его завершении, чтобы получатель мог обработать полученное сообщение и сделать то, что он должен делать дальше.
Это, конечно, упрощение и очень широкое, но это должно дать вам ощущение от того, где значение "(a) синхронно" входит в JS.
Таким образом, синхронный запрос в JS фактически синхронизируется с основным потоком программы. Программа отправляет запрос на сервер ( "Я готов к получению" ) и ждет сообщения. Сообщение с сервера будет иметь четко определенный конец ( "сообщение заканчивается здесь - выполняйте свою работу" ). Когда он получен, JS знает, что он может продолжить выполнение программы.
Ответ 2
синхронно: - когда каждая задача связана и зависит от предыдущей задача
асинхронный: - каждая задача независима от других.
Ответ 3
Synchronous
в контексте вашего вопроса означает, что 2 части ждут друг друга.
Например, если у вас есть клиентский код, который делает запрос на сервер, и ваш код не продолжает свою обработку до тех пор, пока не будет получен ответ сервера, это означает, что ваш код является синхронным, т.е. синхронным с ответом сервера.
Если ваш клиентский код выполняет запрос, но не ждет ответа и продолжает его обработку, и как только ответ запроса с сервера будет получен, тогда ваш код (например, в конкретном обработчике) начнет обрабатывать ответ, тогда обработка асинхронный, т.е. обработка основного клиента асинхронна с ответом сервера.
Эти термины подразумевают небольшую зависимость , поскольку невозможно преобразовать синхронный код в асинхронный, если (используя пример клиент-сервера) ответ является обязательным для клиента, чтобы продолжить его обработку.
Не было бы что-то, что "не блокирует", и это позволяет "основной поток программы для продолжения обработки," быть синхронизированным или "возникать на в то же время"? Кажется, термин синхронный предполагает "неблокирование" и асинхронное "блокирование".
Неверная интерпретация терминов. Синхронизирован не поток программы. Это разные части, которые могут быть (например, потоки) или могут не быть частью той же программы, которая может быть синхронизирована или нет.
Ответ 4
синхронный делает браузер не отвечать на запросы до тех пор, пока запрос не будет завершен, то есть он будет ждать, пока запрос будет обслуживаться, а асинхронный позволит браузеру продолжить обработку во время ожидания ответа.