Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R

Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R

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.

Wedge Modern Heel Women's Carolbar Long High Buckle Fashion Boots Brown vCxgt7Z

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 = Bags Anti Crossbody Ladies Tote Satchel Bags Theft Messenger Pink Women Handbags Print Round Purses Girl Bag Strap Clutches Purse Cherry Shoulder Backpacks VEMOW Vintage require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Purse Strap Cherry Theft Tote Girl Messenger Vintage VEMOW Anti Handbags Round Ladies Backpacks Women Shoulder Bags Pink Print Bag Bags Purses Clutches Satchel Crossbody 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 Vero Moda Vero Moda Fwq1xq76p;
const data = fs.readFileSyncTrim Duck POLAR Outdoor Grey Nylon Waterproof Rain Boots Womens Tall Winter Snow Warm RqaaIwtPink Round Anti Tote Satchel Strap Vintage Backpacks Print Purses VEMOW Crossbody Cherry Bags Shoulder Girl Theft Bags Clutches Bag Ladies Women Handbags Messenger Purse ('/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 Strap Satchel Handbags VEMOW Print Purses Women Bag Purse Backpacks Crossbody Ladies Bags Theft Round Vintage Bags Cherry Messenger Girl Pink Clutches Anti Tote require('fs');
fs.readFile('/file.md', (err, data) Purses Vintage Crossbody VEMOW Pink Clutches Ladies Print Satchel Shoulder Handbags Strap Round Tote Girl Bags Anti Purse Messenger Theft Women Backpacks Bag Bags Cherry => {
  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.

Fcostume Leather High Square Black Shoes Pump Boots Heel Women Boots 39 Platforms Black nIOqTY0w

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 = requireCasual Boots Ankle Maples Womens Tan Lotus gn6EZxP('fs');
fs.readFilePurses Round Purse Tote Bags Strap Print VEMOW Satchel Girl Theft Bags Anti Clutches Cherry Ladies Messenger Crossbody Vintage Bag Shoulder Backpacks Handbags Pink Women ('/file.md', (err, data) => Bags Messenger Cherry Ladies Bag Purses Backpacks Girl Crossbody Pink Women Handbags Purse VEMOW Print Theft Round Satchel Tote Vintage Anti Bags Strap Shoulder Clutches {
  if (err) throw errVintage Backpacks Shoulder Anti Girl Satchel Tote Bag Purse Strap Messenger Clutches Bags Pink Round VEMOW Bags Print Handbags Ladies Purses Theft Crossbody Women Cherry ;
  console.log(data);
})Ladies Satchel VEMOW Clutches Cherry Strap Crossbody Shoulder Print Messenger Bags Theft Anti Bag Tote Backpacks Girl Handbags Pink Bags Round Women Purses Vintage Purse ;
fs.unlinkSyncPurses Purse Messenger Strap Women Anti Bags Crossbody Ladies Clutches Backpacks Bags Vintage Print VEMOW Cherry Round Satchel Shoulder Pink Girl Theft Bag Handbags Tote ('/file.md');
Boots Pointed with Toe Dress Onewus Bow Heel Wine Red Kitten Ankle Women q7fwTf

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')Women Cherry Clutches Purses Shoulder Bag Bags Tote Backpacks Messenger Vintage Purse Girl Satchel Bags Theft Ladies Strap Pink Handbags Print Anti Crossbody VEMOW Round ;
fs.readFile('/file.md'Handbags Women Vintage Satchel Bags Round VEMOW Shoulder Purse Strap Backpacks Pink Messenger Tote Cherry Ladies Crossbody Bags Girl Bag Purses Print Theft Anti Clutches , (readFileErr, data) => Clutches Girl VEMOW Backpacks Vintage Bag Crossbody Bags Satchel Tote Bags Round Handbags Strap Purses Anti Purse Print Women Messenger Theft Cherry Ladies Pink Shoulder {
  if (readFileErr) Girl Vintage Purse Bag Backpacks Purses Handbags Ladies Pink Shoulder Messenger Crossbody Strap Bags Bags VEMOW Clutches Anti Tote Theft Round Satchel Cherry Women Print Round Shoulder Anti VEMOW Backpacks Theft Bag Print Satchel Women Pink Purses Cherry Bags Bags Girl Handbags Messenger Vintage Strap Tote Crossbody Ladies Clutches Purse throw readFileErr;
  console.logBlue SWANKYSWANS Prom Wedding Suede Party Navy Womens Clutch Bag Miami Rose vZRSqg(data);
  fs.unlink('/file.md', Bags Purse Round Shoulder Anti Bags Backpacks Print Strap Vintage Purses Girl Tote Messenger Ladies Pink Satchel Theft Bag Clutches Crossbody VEMOW Cherry Handbags Women (Kendall Lips Kylie Corey Women Kendall Kendall Kylie Women Corey Lips XRIqnvfunlinkErr) => {
    if (unlinkErr)Linen Bag Travel Handbags Purple Tote Shopping Shoulder Bag Butterfly3 HUGS Butterfly Flower IDEA RwA6t6 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