Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Асинхронность в JavaScript (https://javascript.ru/forum/events/21311-asinkhronnost-v-javascript.html)

Kolyaj 28.08.2011 12:27

Цитата:

Сообщение от melky
HTML5 Web Workers

Лучше более общий пример: функция postMessage.

devote,
первый пример у вас какой-то бредовый. Почему то, что в setTimeout должно появиться первым? Что вы вообще под асинхронностью понимаете?

devote 28.08.2011 14:41

Цитата:

Сообщение от Kolyaj
Что вы вообще под асинхронностью понимаете?

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

Kolyaj 28.08.2011 14:45

Причём здесь реализация чего бы то ни было в других языках, и причём здесь что-то, что является дурным тоном в других языках? Как это влияет на JavaScript? И как это всё связано с асинхронностью в JavaScript?

devote 28.08.2011 14:47

Никак, это был ответ на вопрос что я понимаю под асинхроностью

Kolyaj 28.08.2011 14:48

Я не увидел в вашем сообщении чего-то похожего на "асинхронность -- это ..."

devote 28.08.2011 14:55

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

da_ff 30.08.2011 11:26

Подозреваю фраза
Цитата:

опыт создания асинхронных веб-приложений
предполагает лишь приложения с асинхронной подгрузкой данных ajax'ом, не более. На случай если кто-то делает отправку xmlhttprequest блокирующей (говорят такие находятся).
Хотя, может еще воркерсы где они есть или костыльная замена через postmessage.

devote 30.08.2011 15:07

Цитата:

Сообщение от da_ff
предполагает лишь приложения с асинхронной подгрузкой данных ajax'ом,

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

B~Vladi 04.09.2011 12:06

Код под NodeJS можно считать асинхронным веб-приложением. Не одним клиентом едины.

Андрей Параничев 04.09.2011 13:26

devote,
Цитата:

Асинхронность это лишь реализация отдельного независимого процесса, который может выполнять свои собственные задачи не влияя при этом на другие процессы, затем при передаче/обмене данных процессы синхронизируются и обмениваются данными.
Вы не правы. То, что вы описываете не относится к асинхронности, точнее относится лишь опосредованно. Фактически можно асинхронность рассматривать, как описываемое вами, но это будет верно лишь в части случаев. Точное название по вашему описанию будет многопоточностью (организацией независимых потоков, не влияющих друг на друга, выполняющиеся одновременно, с возможностью ожидания завершения и обменом сообщениями), но асинхронность в программировании представлена в большинстве случаем однопоточными реализациями: twisted python, javascript.

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

В JavaScript асинхронность представлена в первую очередь таймерами (setTimeout/setInterval), которые не являются "независимыми процессами", а просто отложенными событиями с обработчиком, ну и конечно реализацию работы во всем "внешним" из JavaScript. В случае браузера это BOM, DOM (обработка событий браузера и HTML) и реализацией объекта XMLHttpRequest, а также многих других. В том же Node.js работа со всеми отдельными модулями (БД, программы, чтение файлов) происходит асинхронно.

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

Поскольку асинхронно не значит "одновременно", и в общем виде не значит, что исполнение кода может быть продолжено, если не завершился участок, названный "асинхронным". Это лишь значит, что через модель событий выполнение кода может быть мягко прервано при наступлении события и будет выполнен обработчик со своим scope.


Часовой пояс GMT +3, время: 04:37.