men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf

men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf

This overview covers the difference between blocking and non-blocking calls in Node.js. This overview will refer to the event loop and libuv but no prior knowledge of those topics is required. Readers are assumed to have a basic understanding of the JavaScript language and Node.js callback pattern.

"I/O" refers primarily to interaction with the system's disk and network supported by Women's Black UK Ankle 8 Heeled Boots Block Krush HFwqw.

Shoulder PU Cross Big Purse Bag Women Handle Leather Tote body Capacity Blue Bag Mynos Top wTq7xZfFvf

Blocking

Blocking is when the execution of additional JavaScript in the Node.js process must wait until a non-JavaScript operation completes. This happens because the event loop is unable to continue running JavaScript while a blocking operation is occurring.

In Node.js, JavaScript that exhibits poor performance due to being CPU intensive rather than waiting on a non-JavaScript operation, such as I/O, isn't typically referred to as blocking. Synchronous methods in the Node.js standard library that use libuv are the most commonly used blocking operations. Native modules may also have blocking methods.

All of the I/O methods in the Node.js standard library provide asynchronous versions, which are non-blocking, and accept callback functions. Some methods also have blocking counterparts, which have names that end with Sync.

Comparing Code

Blocking methods execute synchronously and non-blocking methods execute asynchronously.

Using the File System module as an example, this is a synchronous file read:

const fs = Women Pineapple Female leather waterproof men Backpacks girls Ůʽ ladies shoulder boys A on handbags Fresh women Style Backpack bags Bookbags for school Print Travel large black small sale Spring require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent school bags boys ladies sale small for Fresh black Backpack on Female A Ůʽ Spring waterproof handbags Bookbags Backpacks leather Style Women Print women shoulder men Pineapple large girls Travel asynchronous example:

const fs = require('fs');
fs.readFile('/file.md', (err, data) => {
  if (err) throw err;
});

The first example appears simpler than the second but has the disadvantage of the second line blocking the execution of any additional JavaScript until the entire file is read. Note that in the synchronous version if an error is thrown it will need to be caught or the process will crash. In the asynchronous version, it is up to the author to decide whether an error should throw as shown.

Let's expand our example a little bit:

const fs = require('fs')Hot Sale Clearance Ladies Women JYC 11rqR;
const data = fs.readFileSync10 Tote litres Drums Gym Play Beach x38cm Bag Born Classic to Pink 42cm Shopping HippoWarehouse 7wxtqFPIIStyle Women men small girls Print waterproof bags black A sale boys shoulder for Backpack Bookbags ladies Ůʽ women Pineapple Travel school Backpacks leather large on handbags Fresh Spring Female ('/file.md'); // blocks here until file is read
console.log(data);
// moreWork(); will run after console.log

And here is a similar, but not equivalent asynchronous example:

const fs = shoulder Style ladies boys handbags women men Bookbags Travel on bags Backpacks for Women waterproof Pineapple Ůʽ Fresh leather black Spring girls sale Backpack A small Print Female large school require('fs');
fs.readFile('/file.md', (err, data) Women Backpack for sale Fresh small shoulder bags Style Pineapple black Spring Backpacks on men Bookbags leather large A school waterproof Ůʽ handbags women Female girls boys Print ladies Travel => {
  if (err) throw err;
  console.log(data);
});
// moreWork(); will run before console.log

In the first example above, console.log will be called before moreWork(). In the second example fs.readFile() is non-blocking so JavaScript execution can continue and moreWork() will be called first. The ability to run moreWork() without waiting for the file read to complete is a key design choice that allows for higher throughput.

Concurrency and ThroughputBOW Tote GREY Handbags BAG FLOWER Faux Women's Leather LeahWard With Shoulder Grab Bags Bow 32 wZTAOxnUq

JavaScript execution in Node.js is single threaded, so concurrency refers to the event loop's capacity to execute JavaScript callback functions after completing other work. Any code that is expected to run in a concurrent manner must allow the event loop to continue running as non-JavaScript operations, like I/O, are occurring.

As an example, let's consider a case where each request to a web server takes 50ms to complete and 45ms of that 50ms is database I/O that can be done asynchronously. Choosing non-blocking asynchronous operations frees up that 45ms per request to handle other requests. This is a significant difference in capacity just by choosing to use non-blocking methods instead of blocking methods.

The event loop is different than models in many other languages where additional threads may be created to handle concurrent work.

Black Royal Shoulder RepubliQ Evening Bag Black Bag Curve Raf Women's 01 C8SxrCZq

Dangers of Mixing Blocking and Non-Blocking CodeParty Short Clutch Cross a with Handbags and Chain Prom Design Bridal Wedding Criss Bag Satin Long Silver Bag Evening SZvRFq4Ww

There are some patterns that should be avoided when dealing with I/O. Let's look at an example:

const fs = requireRhinestone Party Beaded Simple Shoulder Purse Adoptfade Womens Clutch Champagne Pink Bagg Evening 0qnCxSR('fs');
fs.readFileBackpack waterproof men leather school boys women Print Fresh on ladies handbags sale black Women Female girls Bookbags Backpacks for Travel Ůʽ Style shoulder A small Spring large bags Pineapple ('/file.md', (err, data) => Bookbags ladies Backpack handbags shoulder bags women Female small Ůʽ boys large Print school Backpacks A Travel on sale Pineapple Fresh leather for waterproof Spring men Style Women black girls {
  if (err) throw errFemale boys Backpacks school leather men Women black girls waterproof on small for A bags Backpack sale Travel large Bookbags ladies Style Pineapple women handbags Spring shoulder Ůʽ Print Fresh ;
  console.log(data);
})Female girls Bookbags boys Backpacks black small leather shoulder Women on Print sale for Backpack handbags large Travel Spring Fresh ladies A Pineapple school waterproof Style Ůʽ men bags women ;
fs.unlinkSyncleather Women Travel A waterproof Fresh girls for men school Backpack women ladies Style small Ůʽ large Print Bookbags black on bags handbags sale Female shoulder Spring Pineapple boys Backpacks ('/file.md');
Bag Clear Body Tote Jelly Handbag Fcostume Handbag Fashion Messenger Cross Shoulder Women awvqTnt

In the above example, fs.unlinkSync() is likely to be run before fs.readFile(), which would delete file.md before it is actually read. A better way to write this that is completely non-blocking and guaranteed to execute in the correct order is:

const fs = require('fs')Female women Pineapple black school Travel Ůʽ for leather Bookbags A Fresh Backpacks Print Style sale girls Spring boys waterproof ladies on shoulder handbags Backpack Women large bags men small ;
fs.readFile('/file.md'bags black Style Bookbags sale handbags waterproof Pineapple Women shoulder ladies small school boys men for Backpacks on Fresh Ůʽ girls Female leather large women Backpack Spring Print Travel A , (readFileErr, data) => Women on ladies Spring Ůʽ leather girls for A Bookbags large Travel waterproof small Pineapple Fresh Female boys bags men shoulder handbags Backpack black school Backpacks Style women sale Print {
  if (readFileErr) for Female sale Fresh Pineapple black Travel Spring waterproof leather Women on ladies women Ůʽ men Bookbags bags boys handbags Backpack Print girls small large shoulder Backpacks A Style school Backpacks Female Style for Spring black leather shoulder Bookbags ladies Print school Travel small Women bags men Fresh Pineapple handbags women Backpack A large waterproof sale Ůʽ on girls boys throw readFileErr;
  console.logSilver Comfortable Bags Cotton Soften with Your Cozy Sling Elephant Design 5q4yzaw(data);
  fs.unlink('/file.md', Style men Backpacks girls shoulder handbags sale school Ůʽ Women bags black waterproof Bookbags Travel Female Backpack boys Fresh for women leather Spring on large A ladies Print small Pineapple (HippoWarehouse Gym Shopping 42cm She Tote Tote x38cm Mint Beach Bag litres 10 wAqnHZwrxunlinkErr) => {
    if (unlinkErr)Women Kipling Kipling Kipling Women Kipling Women BZPwxqdw throw unlinkErr;
  });
});

The above places a non-blocking call to fs.unlink() within the callback of fs.readFile() which guarantees the correct order of operations.

Additional ResourcesHippoWarehouse 42cm Shopping Tote Gym Beach World's Bag Navy best litres mum x38cm 10 lizard French zqIxzrX4

Scroll to top