Back to blog
NodeJS

Blocking vs Non-Blocking Code in Node.js

May 14, 2026 3 min read

What Is Blocking Code?

Blocking code stops execution until a task finishes.

While one task runs:

Nothing else can continue


Blocking Analogy

Imagine standing in a queue:

Wait until first person finishes
↓
Then next person proceeds

Everything pauses.


Blocking Example

const fs = require("fs");

const data = fs.readFileSync("data.txt", "utf8");

console.log(data);

console.log("Finished");


What Happens?

  1. File reading starts

  2. JavaScript waits

  3. Nothing else executes

  4. File reading finishes

  5. Remaining code runs


Blocking Execution Timeline

Diagram: flowchart LR

What Is Non-Blocking Code?

Non-blocking code allows execution to continue while tasks run in background.


Non-Blocking Analogy

Ordering food:

Order food
↓
Continue other work
↓
Food arrives later


Non-Blocking Example

const fs = require("fs");

fs.readFile("data.txt", "utf8", (err, data) => {
  console.log(data);
});

console.log("Finished");


Possible Output

Finished



What Happened?

  1. File read starts

  2. Node.js delegates task

  3. Code continues immediately

  4. Callback executes later


Non-Blocking Execution Timeline

Diagram: flowchart LR

Why Blocking Slows Servers

Node.js uses a single main thread.

If one request blocks:

All other requests must wait


Example Problem

Imagine:

  • User 1 triggers slow blocking file read

  • User 2 sends request

User 2 waits unnecessarily.


Server Blocking Visualization

Diagram: sequenceDiagram

Why Non-Blocking Is Better

Non-blocking code allows Node.js to:

  • Handle more users

  • Stay responsive

  • Improve scalability


Async Operations in Node.js

Most I/O operations are asynchronous.

Examples:

  • File reading

  • Database queries

  • API requests

  • Network operations


Real-World File Read Comparison

Blocking Version

const fs = require("fs");

console.log("Start");

const data = fs.readFileSync("data.txt", "utf8");

console.log(data);

console.log("End");


Execution

Start
(wait)
File content
End


Non-Blocking Version

const fs = require("fs");

console.log("Start");

fs.readFile("data.txt", "utf8", (err, data) => {
  console.log(data);
});

console.log("End");


Execution

Start
End
File content


Database Call Example

Database queries are usually asynchronous.


Example

db.getUsers((users) => {
  console.log(users);
});

console.log("Server still running");

Server continues working while DB query runs.


Blocking vs Non-Blocking

FeatureBlockingNon-Blocking
ExecutionWaitsContinues
PerformanceSlowerFaster
ScalabilityPoorBetter
Node.js PreferenceAvoidPreferred

Why Node.js Prefers Non-Blocking

Node.js is designed for:

  • APIs

  • Real-time apps

  • Streaming

  • Concurrent users

Non-blocking architecture helps achieve this efficiently.


Event Loop Role

The event loop manages async callbacks.

Flow:

Start async task
↓
Continue execution
↓
Execute callback later


Async Request Flow

Diagram: flowchart TD

Common Beginner Mistake

Incorrect thinking:

Async means multiple threads executing JavaScript

Correct:

Node.js uses async I/O to avoid blocking


When Blocking Code Is Acceptable

Blocking operations are sometimes okay for:

  • Startup scripts

  • Small CLI tools

  • Build scripts

Not ideal for production servers.


Practice Example

Blocking

const fs = require("fs");

const data = fs.readFileSync("notes.txt", "utf8");

console.log(data);


Non-Blocking

const fs = require("fs");

fs.readFile("notes.txt", "utf8", (err, data) => {
  console.log(data);
});


Key Takeaways

ConceptSummary
Blocking CodeStops execution
Non-Blocking CodeAllows continuation
Async OperationsPrevent blocking
Node.js StrengthEfficient concurrency
Best PracticeAvoid blocking in servers

Final Notes

Understanding blocking vs non-blocking behavior is critical in Node.js because it directly affects:

  • Performance

  • Scalability

  • User experience

  • Server responsiveness

The most important idea:

Do not block the Node.js event loop


0 Comments

Sign in to join the conversation

No comments yet. Be the first to comment!