I'll say what I know about asynchronicity in general, someone correct me if I'm wrong. I think it's similar in Node, but I'm no Node expert.
This is a pretty complex topic.
Asynchronous code is not necessarily concurrent/parallel (and often isn't).
What async/await do is interrupt the current task at the await point, then proceed to some other task, in the same thread/process. This other task isn't interrupted until it completes or reaches an await of its own.
As you can tell, this is a limited form of asynchronicity, sometimes called 'cooperative'. Because interruptions only happen at specific points, and things aren't parallel, there is much less chance for subtle data races and no deadlocks (if one thread is used). Also, because the context switch is within the application, it is faster.
But how does this provide any benefit, if only one thread is used?
There is some parallelism. It's just that the main application code not parallel. What happens in parallel is
Note that you could do asynchronous with multiple threads. In the Node case (I believe) there is one thread, but multiple program flows running interchangeably between awaits. But you could spread those (many) flows over several (few) real threads.