Асинхронные функции исполняются в основном потоке выполнения (main thread), но их выполнение может быть приостановлено на время выполнения других операций. Это достигается с помощью механизма событийного цикла (event loop). Когда асинхронная функция вызывается, она добавляет свой колбэк (callback) в очередь событий, а затем продолжает выполнение программы. Когда все синхронные операции завершены, событийный цикл начинает обрабатывать очередь событий, вызывая колбэки в порядке их добавления в очередь.
Важно отметить, что асинхронные функции не выполняются в отдельном потоке выполнения, а используют механизм событийного цикла для управления выполнением кода. Это означает, что все асинхронные операции в JavaScript выполняются в одном потоке, но могут быть приостановлены на время выполнения других операций. Этот механизм позволяет избежать блокировки программы и улучшить ее производительность и отзывчивость.