Асинхронные и синхронные термины - PullRequest
29 голосов
/ 20 августа 2011

Меня смущает термин асинхронный применительно к программированию.Кажется, в терминах программирования это означает противоположное тому, что определено в словаре.Например, слово синхронный означает:

  1. , встречающееся одновременно;совпадающие во времени;современники;одновременно.

  2. происходит с той же скоростью и точно вместе;повторяющиеся вместе.

Тем не менее, Википедия говорит:

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

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

Когда я использую синхронный вызов AJAX, я делаю следующее ...

$.ajax({
  url: somefile.php,
  async: false,
  success: {
    ...code that gets run on success...
  }
});

...code that gets run after the ajax-success code runs...

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

Ответы [ 5 ]

21 голосов
/ 20 августа 2011

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

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

Это, конечно, упрощение и очень широкое, но оно должно дать вам ощущение того, откуда в JS появляется значение «(a) синхронный».

Таким образом, синхронный запрос в JS фактически синхронизируется с основным потоком программы. Программа отправляет запрос на сервер («Я готов получить») и ожидает сообщения. Сообщение от сервера будет иметь четко определенный конец («сообщение заканчивается здесь - выполняйте свою работу»). Когда он получен, JS знает, что он может продолжить выполнение программы.

16 голосов
/ 20 августа 2011

синхронный: - когда каждая задача подключена и зависит от предыдущей задачи

асинхронный: - каждая задача независима от других.

9 голосов
/ 20 августа 2011

Synchronous в контексте вашего вопроса означает, что 2 части ждут друг друга.
Например, если у вас есть клиентский код, который отправляет запрос на сервер, и ваш код не продолжает свою обработку, пока не поступит ответ от сервера, это означает, что ваш код является синхронным, то есть синхронным с ответом сервера.
Если ваш клиентский код выполняет запрос, но не ожидает ответа и продолжает его обработку, и как только приходит ответ на запрос от сервера, тогда ваш код (например, в определенном обработчике) начинает обрабатывать ответ, тогда обработка выполняется асинхронный, т. е. обработка основного клиента асинхронна с ответом сервера.
Эти термины подразумевают некоторую нехватку зависимости , поскольку невозможно преобразовать синхронный код в асинхронный, если (на примере клиент-сервер) ответ является обязательным для клиента, чтобы продолжить его обработку.

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

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

0 голосов
/ 01 июня 2018

Синхронный запрос: Запрос называется синхронным, когда он ожидает ответа на этот конкретный запрос, прежде чем выполнить другой.т. е. когда клиент выполняет вызов синхронно, он блокирует браузер клиента, чтобы гарантировать, что клиент не сможет выполнить другой вызов, прежде чем получить ответ сервера на этот предыдущий вызов.

Асинхронный запрос: AnАсинхронный вызов работает независимо, т.е. он не ожидает ответа сервера перед выполнением другого вызова или запроса.так что вы можете просто делать разные звонки одновременно, не дожидаясь ответа сервера.

0 голосов
/ 15 июня 2014

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

...