Event loop
We would like to end this chapter by explaining how JavaScript handles asynchrony and concurrency under the hood. JavaScript is a single-threaded language. A thread in this context means a path of execution. If there is only a single path, this means that tasks will have to wait for one another and only one thing can happen at a time.
This single executor is the event loop. It's a process that executes the actual work. You may wonder about this, because you've just learned about concurrency and doing things asynchronously and at the same time. Well, even though JavaScript is single-threaded, it doesn't mean that it cannot outsource some tasks and wait for them to come back. This is exactly how JavaScript manages to do things in a multithreaded manner.
Call stack and callback queue
JavaScript works with a call stack, and all the actions that it has to execute are queued up here. The event loop is a process that is constantly monitoring this call...