# Event loop in Node JS

# Introduction
  Node Js is a runtime environment for java script and java script is a synchronized single threaded language. Single threaded means only one task can run at a time. Node Js is built of 2/3 `Js`  and 1/3 `C++` . The C++ provide asynchronization features which help us run task in  parallel.

# Event Loop
  The [event loop](https://nodejs.dev/learn/the-nodejs-event-loop) is the major feature of node Js and is very useful for single threaded applications. It uses a **stack** data structure. When a JS program run it creates a Global Execution Context(*GFC*), which is used to execute functions and is pushed in the stack.
   When a function is invoked it gets pushed to the stack and is returned after completion. Since the stack is a single way, we can run multiple programs at once.

# Examples 
  Let us consider the following piece of code,
```
console.log("One");
   
setTimeout(function(){
    console.log("Two");
}, 1000);
   
console.log("Three"); 
```
OUTPUT:
```
First
Three
Two
```

When the `setTimeout` function is called it request the **timer** present in the *window* object to run and wait for 2000 seconds but the next function statement runs first. This is due to something called the **Callback queue** which stores the callback functions until the time is over and allows the program to run the next line of code.
  After the time has completed the queue returns the callback and allow execution, with this feature `fetch()` and other request based operations are performed.  There is also a more priority queue called *micro task queue* for functions involving more priority. 
