Mr. Deepak Verma
Web Developer
Node Architecture

Learn Node JS by M-Learnify

Node JS

Node Architecture


What is Node.js Architecture?

Node.js uses a single-threaded, event-driven architecture designed to handle many connections efficiently and without blocking the main thread. This makes it ideal for building scalable network applications, real-time apps, and APIs.

  • Key Characteristics: Non-blocking I/O, event-driven, single-threaded with event loop, asynchronous execution
Node.js Architecture Diagram

Overview of how Node.js processes requests:

  1. Client Request Phase: Clients send requests to the Node.js server; each request is added to the Event Queue
  2. Event Loop Phase: The Event Loop continuously checks the Event Queue and picks up requests one by one
  3. Request Processing: Simple tasks handled immediately; complex/blocking tasks offloaded to the Thread Pool
  4. Response Phase: Callbacks from blocking tasks are placed in the Callback Queue; Event Loop processes them and sends responses
Example: Non-blocking File Read

Notice how "After file read" is printed before the file contents, demonstrating non-blocking behavior:


const fs = require('fs');
console.log('Before file read');
fs.readFile('myfile.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('File contents:', data);
});
console.log('After file read');
        
Example: Blocking vs Non-blocking Code

// Blocking code example
console.log('Start of blocking code');
const data = fs.readFileSync('myfile.txt', 'utf8'); // Blocks here
console.log('Blocking operation completed');

// Non-blocking code example
console.log('Start of non-blocking code');
fs.readFile('myfile.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('Non-blocking operation completed');
});
console.log('This runs before the file is read');
        

Key Difference: Blocking code halts the process until the file is read, while non-blocking code allows other operations to continue concurrently.

When to Use Node.js

Node.js is particularly well-suited for:

  • I/O-bound applications โ€“ file operations, database queries, network requests
  • Real-time applications โ€“ chat apps, live notifications, collaboration tools
  • APIs โ€“ RESTful services, GraphQL APIs
  • Microservices โ€“ small, independent services

Node.js may not be ideal for CPU-intensive tasks. Alternatives include:

  • Using worker threads
  • Creating a microservice in a more suitable language
  • Using native add-ons
Summary

Node.js is fast and efficient because it uses a non-blocking event loop and delegates heavy work to the system, allowing it to handle thousands of connections simultaneously with minimal resources.

  • Handles many concurrent connections efficiently
  • Great for I/O-bound applications
  • Uses JavaScript on both client and server
  • Large ecosystem of packages (npm)
โ† Back to Courses
Course Lessons