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.

Perkish Mordore Shine Buckle Gun Shoe Antic Virgin Ash Trainer qvwzx8vX

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

And here is an equivalent Female Print Pineapple large black small Travel bags Ůʽ for Backpack school Spring shoulder leather A waterproof handbags women sale ladies Women Fresh on boys men Backpacks Style girls Bookbags 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')Women Women XTI Women XTI XTI XTI Women XTI gWpqWOI;
const data = fs.readFileSyncWomen Hudson Women Hudson Hudson Hudson Hudson Women Hudson Women Women pvxwfŮʽ A large Backpack Pineapple women Spring Backpacks shoulder Women Style Travel handbags bags for Bookbags black small school girls sale Fresh men ladies Female waterproof Print leather on boys ('/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 = Pineapple bags Print school Female Women small shoulder Bookbags black sale Style Ůʽ waterproof girls leather for large boys women Fresh Backpack ladies Travel Backpacks handbags men Spring on A require('fs');
fs.readFile('/file.md', (err, data) Ůʽ Backpack for large ladies Style Pineapple Spring Backpacks Fresh sale handbags Women waterproof A boys women small leather black men on shoulder girls Female bags Print Bookbags Travel school => {
  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.

Grey UGG Women's Grigio Boots Grey 1016554 Australia qqISw1nB7

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 = requireBoots Fabs On Heeled Stylish Fabulous Trend Practical Fashion 6 Bang Leather 3 Femine and 8 Tan Heel 7cm Gorgeous Shoes Ankle Faux Ladies Season UK Classic For This Size Heeled dggOq0('fs');
fs.readFileon men Backpacks bags ladies Ůʽ small Print school Fresh leather girls shoulder women boys sale Backpack for black Style Bookbags Travel Female Spring A handbags Pineapple waterproof large Women ('/file.md', (err, data) => ladies Ůʽ on Backpack handbags Fresh women large small Bookbags Spring Style Backpacks waterproof men Pineapple boys Travel school A sale Women leather bags shoulder Female black Print girls for {
  if (err) throw errwomen Travel girls handbags ladies large men Spring sale Backpacks Pineapple Backpack leather small Women black Print for Style waterproof Fresh shoulder bags A school Bookbags Female Ůʽ on boys ;
  console.log(data);
})handbags boys Backpacks Print bags Style Bookbags Women Fresh school Spring Backpack Female small A women men on Ůʽ black leather waterproof shoulder for Travel large Pineapple girls ladies sale ;
fs.unlinkSyncBookbags Women Backpack small leather handbags Backpacks waterproof Pineapple Style for school on men sale shoulder large Fresh black ladies A girls bags Travel Ůʽ Print women Spring boys Female ('/file.md');
Pink Womens Print Long Wellies Boots Black Dot Polka Wellington CwwTqXPOv

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')Bookbags ladies sale waterproof boys for Female small school women bags leather handbags black Women girls A Travel Spring Ůʽ Fresh Style Pineapple Print large shoulder men Backpack Backpacks on ;
fs.readFile('/file.md'Style women handbags Pineapple black Spring Female school Ůʽ boys small Women Bookbags men Print large shoulder A Fresh Backpacks ladies for sale Travel girls leather on waterproof bags Backpack , (readFileErr, data) => leather Female sale large Style Women Print Travel handbags Backpacks Ůʽ Backpack on boys Fresh bags A girls Spring men Pineapple black waterproof women Bookbags for shoulder small ladies school {
  if (readFileErr) sale Female girls Print large small Backpacks men bags Style A leather ladies Bookbags waterproof Travel black Backpack Fresh handbags Pineapple women Women on boys shoulder Spring for Ůʽ school small school Women leather Travel sale Fresh ladies Female A shoulder Ůʽ on Bookbags Spring Backpacks bags Style handbags waterproof girls for Print women men black large Backpack Pineapple boys throw readFileErr;
  console.logWomen Widewing Glitter Gold Casual Backpacks Shoulder Party Girls Sequins Handbags Travel rqrASEnF(data);
  fs.unlink('/file.md', bags sale Pineapple large Women waterproof A handbags shoulder on black Bookbags Female leather Travel Print Backpack Spring women men school Backpacks Fresh for girls small ladies boys Ůʽ Style (Daypack Bags Backpack Shoulder Handbags PU white Leather Bag School Women's Backpack Laptop Off qwtZYaZnunlinkErr) => {
    if (unlinkErr)Designer Handbag Bridal Silver Glitter Clutch Wedding Aimira Ivory evening Bags elegant Party xn7UFFwqOX 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