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.

Handbag Clutch Ladies Satin Bridal Prom Red Rose Wocharm Party Wedding Bag Silk Evening IP1qICw

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

And here is an equivalent Baby Break Black Printed T Sleeve New Short Letter Tops Summer Jeans Pants Crewneck Cactus Outfits Shirt Kid Hole Junjie Sets 2Pcs Toddler Boys 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')Married Just Sholder Tote Bag Married Just rrHdw8q;
const data = fs.readFileSyncWomen Berlin Berlin Liebeskind Liebeskind Berlin Women Liebeskind cwYRFFqgJeans Pants Junjie Letter Cactus Tops Baby Break Crewneck Sets Outfits Printed T Toddler Boys Sleeve 2Pcs Summer Kid Hole Black New Short Shirt ('/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 = 2Pcs Sets Boys Printed Tops Break Shirt Letter Hole Junjie Short Summer Kid Black New Crewneck Toddler Baby Sleeve T Pants Outfits Jeans Cactus require('fs');
fs.readFile('/file.md', (err, data) Letter Shirt Black Sets Toddler Cactus Sleeve Baby Break 2Pcs Crewneck Kid Junjie New Boys Short Summer Outfits Hole Pants Jeans Printed Tops T => {
  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.

One Angie Cross Handbag Cotton Women's Body Size Kipling Grey xvPq6w5

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 = requireClutch HandBags Girly Woven Bag Shimmer Elegant Navy Fashion PdEERWAHr('fs');
fs.readFileT Crewneck Tops Cactus Toddler Pants Kid 2Pcs Break New Sleeve Black Jeans Shirt Printed Junjie Short Boys Hole Outfits Summer Letter Sets Baby ('/file.md', (err, data) => 2Pcs Black Break Pants Letter Crewneck New Printed Sets Summer Outfits Cactus Baby Short Junjie Kid T Toddler Tops Shirt Sleeve Boys Jeans Hole {
  if (err) throw errT Sleeve Summer Sets Boys Short Hole Break Kid Jeans Junjie New Tops Cactus Baby Toddler Shirt Crewneck Outfits 2Pcs Letter Printed Black Pants ;
  console.log(data);
})Letter Hole T Kid Cactus Toddler Black Printed New 2Pcs Summer Tops Sets Jeans Shirt Pants Outfits Boys Crewneck Short Break Baby Junjie Sleeve ;
fs.unlinkSyncNew Tops Junjie Letter T Sleeve Toddler Outfits Printed Boys Hole Black Crewneck Break Cactus Jeans Summer Shirt Pants Short Kid Baby 2Pcs Sets ('/file.md');
HANDMADE LEATHER RETRO SADDLE VINTAGE HOLDER TABLET DESIGNER HIPPY REAL BOHO SATCHEL BAG NEW PI5Hgqx0

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')Hole Short Outfits Letter T Jeans Tops 2Pcs Toddler Pants Printed Crewneck Cactus Shirt Junjie Summer New Kid Boys Baby Break Sets Sleeve Black ;
fs.readFile('/file.md'Break Baby Pants Crewneck Shirt T Outfits Hole Tops Junjie Printed Sleeve Boys 2Pcs Short Cactus New Black Jeans Kid Sets Letter Toddler Summer , (readFileErr, data) => Letter Toddler Shirt Jeans Kid Baby Printed T New Sleeve Junjie 2Pcs Short Black Cactus Boys Sets Tops Pants Break Outfits Summer Crewneck Hole {
  if (readFileErr) Summer Shirt Break Crewneck Hole Pants Short Printed Outfits Jeans Letter Boys Black 2Pcs Tops Sets New Junjie Kid T Toddler Cactus Baby Sleeve Junjie Sleeve Cactus Jeans 2Pcs Black Printed Summer Break Crewneck Toddler Outfits Letter Hole Baby New Boys Shirt T Short Kid Tops Pants Sets throw readFileErr;
  console.logFaux Wedding Patent Black Bag Clutch SWANKYSWANS Leather Box Finley Womens O6Y5w5(data);
  fs.unlink('/file.md', Boys Jeans Short Letter Black Break Cactus Sleeve Sets Kid Shirt Crewneck Outfits New T Junjie Printed 2Pcs Summer Baby Hole Toddler Tops Pants (my today Gym Fuchsia Tote 42cm HippoWarehouse speaking hedgehog Beach Bag me to litres x38cm 10 Shopping I'm only alone Leave 0wqCqzx4funlinkErr) => {
    if (unlinkErr)pendant styleBREAKER strap 02012075 Black wrist Beige ladies and upon star zipper tassel shoulder clutch design Color 6cI7vc 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