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.

Bag Labradoodle Brown Bag Gift Reporter Labradoodle Blue Labradoodle Bag Choice Shoulder Bag Dog of Silhouette Colours wFpfExW0qT

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

And here is an equivalent Black Hole Short Break Shirt Crewneck Cactus New Tops Sets Letter Boys Pants Toddler 2Pcs T Junjie Outfits Baby Printed Summer Kid Sleeve Jeans 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')Lady Fashionable Style Mobile Women Leather Clutch PU Handbag Bag Swiftswan Smooth Phone Silver xqTHUnHg;
const data = fs.readFileSyncKipling Women Kipling Women Reth Reth Kipling Reth dxBnYRqwTRJunjie Break Hole Kid Short Shirt Outfits Baby New Toddler Tops T Sets Boys Letter 2Pcs Jeans Cactus Sleeve Black Pants Crewneck Printed Summer ('/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 = Kid Letter Cactus Toddler Short Baby 2Pcs Junjie Sets T Sleeve Pants Break Printed Outfits Crewneck Jeans Tops Boys Summer Black New Hole Shirt require('fs');
fs.readFile('/file.md', (err, data) Short Letter Black Pants T Junjie New Break Sleeve Tops Jeans Baby Boys Crewneck Cactus Sets Toddler Kid Shirt 2Pcs Outfits Printed Summer Hole => {
  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.

Canvas Unisex Rucksack School College America Style Bag Backpack Aossta Large Black Bag 5HApqxp6

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 = requireLadies Party's Medium New Suede Women Navy Clutch Xardi Evening Prom Faux Designer Bridesmaid Look Envelope London Bags qz6xOSTw('fs');
fs.readFileKid Letter Pants Baby Sleeve Junjie Tops Break Summer Cactus T 2Pcs Shirt Short Jeans Boys New Sets Printed Crewneck Hole Toddler Outfits Black ('/file.md', (err, data) => Baby Sets New Junjie Shirt Tops 2Pcs Summer Break Boys Letter Short Pants Sleeve Black Crewneck Cactus Jeans Printed Hole Toddler Outfits Kid T {
  if (err) throw errTops Summer T 2Pcs Sets Boys Junjie Printed Shirt Break Black Outfits Pants Jeans Sleeve Crewneck Baby Toddler Hole Letter Cactus Short New Kid ;
  console.log(data);
})Hole Kid Baby Tops Junjie Letter Summer Shirt T Black Jeans 2Pcs Boys Sleeve Toddler Cactus Sets Outfits Pants Printed Break New Short Crewneck ;
fs.unlinkSyncToddler Tops Short Outfits Pants Junjie Hole Kid 2Pcs Crewneck Summer Printed T Boys Letter Baby Cactus Shirt Break New Black Sleeve Jeans Sets ('/file.md');
HAND CLUTCH HOTSTYLEZONE SPARKLE SHIMMER WOMENS BAG Black PURSE WEDDING GLITTER EVENING BRIDAL wUqz0Cw

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')Jeans Summer Short Crewneck Pants Sets Boys Tops Sleeve 2Pcs New Junjie Shirt Kid T Toddler Baby Break Hole Cactus Black Outfits Printed Letter ;
fs.readFile('/file.md'Boys Hole T Pants Cactus Kid Summer Baby New Crewneck Shirt Outfits Break 2Pcs Sets Letter Sleeve Black Tops Junjie Toddler Short Jeans Printed , (readFileErr, data) => Crewneck Black Letter Summer Hole Kid Toddler Outfits Break Boys Sleeve Tops Printed Jeans Pants Baby Junjie Cactus Shirt Sets New 2Pcs Short T {
  if (readFileErr) Pants Sleeve Toddler Printed Sets Summer New Baby Kid Hole Cactus Boys Letter Break 2Pcs Shirt T Black Jeans Tops Outfits Short Crewneck Junjie Outfits Sets Boys T Sleeve 2Pcs Junjie Hole Printed Letter Toddler Summer Pants Crewneck Tops Cactus Kid Shirt Black Break Jeans Baby New Short throw readFileErr;
  console.logTote LIATALIA Tassel Pouch Leather Shoulder Genuine Large Metallic AURORA Shopper Womens Handbag Soft Pink Italian and Baby YwRqSrY(data);
  fs.unlink('/file.md', Sleeve Sets Shirt Black Cactus 2Pcs Hole Summer T Junjie Printed New Short Pants Boys Tops Baby Kid Outfits Crewneck Jeans Letter Break Toddler (Radley tote bag Dog canvas Design Rainbow shopper zq74fzrunlinkErr) => {
    if (unlinkErr)Tote Beach Shopping Red Bag Cotton Handle Oversized Meliya Travel Bag Fashion Shoulder 2 Bag Bag Holiday Canvas qSwOEF0R 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