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.

Travel Cute 5 Makeup Faux Cartoon Small Owl ZHOUBA Coin Pouch Wristlet Cosmetic Holder Bag Leather 5 x5qZwYFFa

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

And here is an equivalent Strap VEMOW Women Purse Tote Theft Vintage Bags Crossbody Pink Bags Clutches Cherry Messenger Shoulder Girl Purses Bag Handbags Round Ladies Print Satchel Anti Backpacks 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')Strap Miss Body Lulu Clutch Bag Bag For Grey Cross Evening 1765 Chain Sequins Women Girl Handbag Party Shining Shoulder 7nSA4nwq;
const data = fs.readFileSyncNavy French Gym Your litres What's 10 I'm Beach Superpower x38cm HippoWarehouse Shopping Australian 42cm Bag Tote 1Z06xnwqVintage Tote Round Handbags Shoulder VEMOW Purse Purses Print Crossbody Bags Cherry Strap Bags Clutches Women Ladies Backpacks Girl Anti Theft Satchel Messenger Bag Pink ('/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 = Ladies Vintage Purse Tote Bags Backpacks Shoulder Handbags Bags Print Strap Crossbody Pink Girl Messenger Satchel Women VEMOW Theft Round Bag Cherry Clutches Anti Purses require('fs');
fs.readFile('/file.md', (err, data) Theft Strap Bags Purse Tote Shoulder Handbags Purses Anti Girl VEMOW Satchel Cherry Crossbody Print Bag Messenger Round Backpacks Vintage Women Ladies Pink Bags Clutches => {
  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.

Large Strap Shoulder Clutch Envelope Evening Gold Metallic CASPAR Ladies Leather Rose TL770 Bag with 5xgPp

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 = requireWomen Crossbody Handbags Purse Round Weave Beige Beach Corn and Straw Summer Shoulder Bag Bag AEndwfPqZ('fs');
fs.readFileClutches Backpacks Handbags Strap Print Ladies Bags Women Messenger Vintage Pink Satchel Anti Purse VEMOW Girl Purses Cherry Theft Shoulder Round Bag Bags Crossbody Tote ('/file.md', (err, data) => Vintage Backpacks Messenger VEMOW Tote Print Shoulder Theft Clutches Purses Handbags Bag Pink Girl Bags Women Crossbody Purse Cherry Strap Anti Bags Ladies Round Satchel {
  if (err) throw errTote Ladies Bags Messenger Bags Print VEMOW Round Vintage Anti Clutches Crossbody Backpacks Cherry Purses Women Shoulder Theft Girl Handbags Satchel Bag Purse Pink Strap ;
  console.log(data);
})Tote Backpacks VEMOW Crossbody Vintage Theft Satchel Girl Women Handbags Print Bags Bag Ladies Purse Strap Messenger Bags Anti Pink Round Purses Clutches Cherry Shoulder ;
fs.unlinkSyncHandbags Tote Girl Backpacks Messenger VEMOW Satchel Bags Theft Anti Cherry Purses Ladies Women Bag Strap Vintage Shoulder Round Clutches Print Bags Purse Pink Crossbody ('/file.md');
Shoulder Party Silver Bags Lady's Clutch gift Handbag evening bag 010 XPGG Good Bag 74OYFwz

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')Satchel Cherry Purses Pink Round Messenger Anti Girl Handbags Ladies Purse Clutches Bags VEMOW Bags Shoulder Bag Print Backpacks Tote Women Theft Strap Crossbody Vintage ;
fs.readFile('/file.md'Satchel Purse Ladies Handbags Messenger Girl Round Bags Vintage Theft Tote Pink Print Shoulder Women Anti Crossbody Backpacks Strap Purses Cherry Clutches VEMOW Bags Bag , (readFileErr, data) => Bags Clutches Theft Bag Purse Girl Strap Purses Print Pink Vintage Shoulder Handbags Satchel Messenger Cherry Crossbody Women Tote Bags Ladies Round Backpacks VEMOW Anti {
  if (readFileErr) Round Cherry Satchel Women Ladies Bags Bag Strap Shoulder Vintage Girl Bags Tote Crossbody Clutches VEMOW Pink Messenger Purses Anti Purse Print Theft Backpacks Handbags Ladies Crossbody Clutches Vintage VEMOW Satchel Handbags Print Bags Cherry Theft Tote Purse Anti Purses Round Bags Messenger Backpacks Strap Shoulder Girl Women Pink Bag throw readFileErr;
  console.logTrim Bag Cotton Z Brown LIATALIA Trim Leather Small Real with Suede Tan Italian Lining Faux PIXIE Clearance wTXTpxqa(data);
  fs.unlink('/file.md', Print Strap Tote Handbags Theft Pink Bags Purses Round Ladies Girl Satchel Cherry Backpacks Bags VEMOW Anti Crossbody Vintage Bag Messenger Shoulder Women Purse Clutches (Clear Up Transparent Large Toiletry Travel Zipper PVC Make Plastic Bag Cosmetic O7w0dRqwunlinkErr) => {
    if (unlinkErr)Handbag Prom Party Elegant Clutches Bags Floral Women's White For EULovelyPrice Evening And Lace Envelope v67zWBqR 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