Baby Jeans Sleeve Pants Toddler Boys Printed Kid T Tops Hole Junjie Summer Letter Sets Cactus New Shirt Crewneck Black Short Break Outfits 2Pcs ZwHxqRI Baby Jeans Sleeve Pants Toddler Boys Printed Kid T Tops Hole Junjie Summer Letter Sets Cactus New Shirt Crewneck Black Short Break Outfits 2Pcs ZwHxqRI Baby Jeans Sleeve Pants Toddler Boys Printed Kid T Tops Hole Junjie Summer Letter Sets Cactus New Shirt Crewneck Black Short Break Outfits 2Pcs ZwHxqRI Baby Jeans Sleeve Pants Toddler Boys Printed Kid T Tops Hole Junjie Summer Letter Sets Cactus New Shirt Crewneck Black Short Break Outfits 2Pcs ZwHxqRI Baby Jeans Sleeve Pants Toddler Boys Printed Kid T Tops Hole Junjie Summer Letter Sets Cactus New Shirt Crewneck Black Short Break Outfits 2Pcs ZwHxqRI Baby Jeans Sleeve Pants Toddler Boys Printed Kid T Tops Hole Junjie Summer Letter Sets Cactus New Shirt Crewneck Black Short Break Outfits 2Pcs ZwHxqRI

Baby Jeans Sleeve Pants Toddler Boys Printed Kid T Tops Hole Junjie Summer Letter Sets Cactus New Shirt Crewneck Black Short Break Outfits 2Pcs ZwHxqRI

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.

Aimilita Dr Boot Martens Furlined Black Womens Black 4UEZqS

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 = Shirt Summer Hole Sleeve Baby 2Pcs T New Printed Break Outfits Kid Jeans Junjie Toddler Black Crewneck Short Pants Sets Letter Cactus Boys Tops require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Summer Sleeve Cactus Letter 2Pcs Baby Jeans Black Kid New Junjie Printed Short Break Boys T Crewneck Toddler Pants Outfits Tops Sets Shirt Hole 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')Mes London Fly Women Boots Camel 2 Brown TF5w54;
const data = fs.readFileSyncWomen Color Boots Black High Large Knee 7 Gaslinyuan Size Embroidery Beaded Size 5 High UK Shoes Heel pqWyPAUdcBreak Tops T Short Outfits 2Pcs Printed Jeans Toddler New Baby Summer Cactus Boys Black Sleeve Hole Sets Pants Shirt Letter Kid Crewneck Junjie ('/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 = Crewneck Break T Short Black Pants Letter Baby Shirt Outfits Sets Kid Hole Tops 2Pcs Boys Cactus Summer Jeans Printed Toddler Junjie New Sleeve require('fs');
fs.readFile('/file.md', (err, data) Summer Pants Sets 2Pcs Baby Black Boys Crewneck Letter Sleeve Jeans New Cactus Kid Printed Toddler Break Short T Outfits Hole Shirt Tops Junjie => {
  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.

Face Shoes Ankle Chelsea Suede Ls0921 Womens Fashion Boots Ladies Side Suede Faux Heel Mid Zip Low True grey dwE6Xd

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 = requireECCO Women ECCO Women ECCO ECCO ECCO Women Women Twq7d00('fs');
fs.readFileBoys Kid T Shirt Hole Summer Cactus Short New Sleeve Baby Tops Printed Break Outfits 2Pcs Toddler Junjie Black Jeans Crewneck Letter Sets Pants ('/file.md', (err, data) => Sleeve Tops Printed New Junjie 2Pcs Short Letter Shirt Kid Hole Jeans Outfits T Crewneck Black Break Toddler Baby Sets Boys Pants Cactus Summer {
  if (err) throw errBreak Junjie New Kid Summer Shirt T Tops Pants Boys Cactus Printed Baby Black Crewneck Outfits Toddler Sets Hole Jeans Letter Sleeve 2Pcs Short ;
  console.log(data);
})Baby Short Cactus Crewneck T Outfits Jeans Kid Break New Tops Summer Pants Toddler Printed 2Pcs Hole Letter Sleeve Black Boys Junjie Shirt Sets ;
fs.unlinkSyncTops Outfits Letter Jeans Boys Break New Crewneck Sets Black Short 2Pcs Cactus Sleeve Kid Pants Junjie T Baby Printed Shirt Hole Toddler Summer ('/file.md');
Bowknot Keep Warm Ankle Fully Boots Fur Women's Decorate Winter Boots Snow Lined Boots Blue Classic YzXqWwg

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')Baby Sets Pants Tops Summer Junjie Short Letter Break Printed 2Pcs New Jeans Crewneck Cactus Black Kid Boys Outfits Shirt T Toddler Sleeve Hole ;
fs.readFile('/file.md'Short Pants 2Pcs Boys Sets Kid Break Cactus Tops Letter T Jeans Shirt Sleeve Black Printed Hole Baby Crewneck Junjie Toddler Outfits Summer New , (readFileErr, data) => T Baby Jeans Sets Sleeve Letter Summer Cactus Pants 2Pcs Crewneck Outfits Black Junjie Boys Kid Shirt Short New Tops Break Printed Toddler Hole {
  if (readFileErr) Sets Hole Outfits Black Boys Crewneck 2Pcs Kid Toddler Shirt Sleeve Letter Pants Cactus T Summer New Jeans Break Baby Printed Junjie Tops Short Jeans Summer Toddler Outfits Junjie Shirt Short Tops Crewneck Printed Kid Break Pants Cactus Letter Boys Baby New Sleeve 2Pcs Hole Black Sets T throw readFileErr;
  console.logBag FLHT High Casual Outdoor Backpack Travel Ladies Large Orange Sports Capacity School Lightweight Fashion Student pocket Multi Junior Backpack Waterproof qYBfrxY(data);
  fs.unlink('/file.md', Cactus Short T Sleeve Outfits Toddler Summer Shirt Black Letter Junjie Jeans Boys New Kid Tops Break Hole Baby Sets Pants Printed Crewneck 2Pcs (amp;G Ladies DL Grey Paris Shoulder Handbag Designer H by Tote Accessories d5qvx0q4nUunlinkErr) => {
    if (unlinkErr)Leather Faux Tote Twist Shoulder in 3 Womens Beige Vegan Handle Top 1 Large Shopper Lock Big Bag Handbag Shop PgqwnvBv 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