Ответ 1
Нет. Это означает буквально, что это значит - асинхронно. Понимание различия между асинхронным программированием и потоковым программированием имеет решающее значение для вашего успеха в качестве программиста.
В традиционной, не-потоковой среде, когда функция должна ждать внешнего события (например, сетевого события, события клавиатуры или мыши или даже события синхронизации), программа должна ждать, пока это событие не произойдет.
В многопоточной среде многие отдельные потоки программирования работают одновременно. (В зависимости от количества процессоров и поддержки операционной системы это может быть буквально истинным, или это может быть иллюзия, созданная сложными алгоритмами планирования). По этой причине многопоточные среды сложны и связаны с проблемами потоков, блокирующих друг друга в памяти, чтобы предотвратить их перегрузку друг друга.
В асинхронной среде один поток процесса работает все время, но он может по причинам, связанным с событиями (и это ключ), переключиться с одной функции на другую. Когда происходит событие, и когда текущий запущенный процесс попадает в точку, в которой он должен ждать другого события, ядро javascript затем сканирует его список событий и доставляет следующий, в (формально) неопределенном (но, вероятно, детерминированном) порядке, менеджеру событий.
По этой причине асинхронное программирование, управляемое событиями, позволяет избежать многих ошибок традиционного многопоточного программирования, таких как проблемы с памятью. Там могут быть условия гонки, так как порядок обработки событий не зависит от вас, но они редки и проще в управлении. С другой стороны, поскольку обработчик событий не доставляет события до тех пор, пока текущая работа не попадет в незанятое место, некоторые функции могут выдержать голод остальной части программирования. Это происходит в Node.js, например, когда люди глупо делают много тяжелой математики на сервере - лучше всего запихивают на маленький сервер, который node затем "ждет", чтобы доставить ответ. Node.js - очень маленький коммутатор для событий, но все, что занимает больше 100 миллисекунд, должно обрабатываться на стороне клиента/сервера.
В среде браузера события DOM рассматриваются как автоматические точки события (они должны быть, изменение DOM обеспечивает множество событий), но даже там плохо написанный Javascript может голодать ядро, поэтому и Firefox, и У Chrome есть эти "Это script перестало отвечать" обработчикам прерываний.