devote,
Цитата:
|
Асинхронность это лишь реализация отдельного независимого процесса, который может выполнять свои собственные задачи не влияя при этом на другие процессы, затем при передаче/обмене данных процессы синхронизируются и обмениваются данными.
|
Вы не правы. То, что вы описываете не относится к асинхронности, точнее относится лишь опосредованно. Фактически можно асинхронность рассматривать, как описываемое вами, но это будет верно лишь в части случаев. Точное название по вашему описанию будет многопоточностью (организацией независимых потоков, не влияющих друг на друга, выполняющиеся одновременно, с возможностью ожидания завершения и обменом сообщениями), но асинхронность в программировании представлена в большинстве случаем
однопоточными реализациями: twisted python, javascript.
Для простоты понимания можно просто назвать асинхронность событийно-ориентированным программированием (event-driven, если хотите), поскольку это определение точнее передает суть.
В JavaScript асинхронность представлена в первую очередь таймерами (setTimeout/setInterval), которые не являются "независимыми процессами", а просто отложенными событиями с обработчиком, ну и конечно реализацию работы во всем "внешним" из JavaScript. В случае браузера это BOM, DOM (обработка событий браузера и HTML) и реализацией объекта XMLHttpRequest, а также многих других. В том же Node.js работа со всеми отдельными модулями (БД, программы, чтение файлов) происходит асинхронно.
Но асинхронный код может быть написан не только с использованием обмена данных с "внешними" объектами. По сути любой код с обработчиками событий и генерацией событий может быть назван асинхронным, даже если весь код выполняется в одном потоке, как это происходит в JavaScript. Т.е. даже при самостоятельной организации событий и обработчиком код будет асинхронным, поскольку в нем работает правило "установка обработчика - получение сигнала о событии - выполнение обработчика".
Поскольку асинхронно не значит "одновременно", и в общем виде не значит, что исполнение кода может быть продолжено, если не завершился участок, названный "асинхронным". Это лишь значит, что через модель событий выполнение кода может быть мягко прервано при наступлении события и будет выполнен обработчик со своим scope.