JavaScript code is executed in a single thread, that is, two pieces of a script cannot run at the same time. Each website opened in the browser gets a single thread for downloading, parsing, and executing the website, called the main thread.
The main thread also maintains a queue, which has asynchronous tasks queued to be executed one by one. These queued tasks can be event handlers, callbacks, or any other kind of task. New tasks are added to the queue as AJAX requests/responses happen, events occur, timers are registered, and more. One long-running queue task can stop the execution of all other queue tasks and the main script. The main thread executes the tasks in this queue whenever possible.
HTML5 introduced web workers, which are actual threads running parallel to the main thread. When a web worker finishes executing or needs to notify the main...