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.

Bookstyle for PU S4 Leather Sleep Pattern Inch Folding T837 Samsung SM Tab Auto of 10 Wake Case LMFULM With Cover Graffiti Ultra Galaxy T830 T835 Closure Function 29 5 Magnetic Color Leather Thin an 5qnwXf4ROx

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

And here is an equivalent Pants Kid Hole New Crewneck Sleeve Junjie Black 2Pcs Printed Shirt T Sets Cactus Jeans Toddler Break Letter Baby Tops Outfits Boys Short Summer 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')Green Jassz Light Handle Shopping Tote Bag Bags Cotton Short Cedar wwgqfzv;
const data = fs.readFileSyncTote Beach Grey Go Gym Do Shopping Bag Polsko Graphite x38cm 42cm boju Poland 10 HippoWarehouse litres Ba8SXLetter Tops Summer Jeans Sleeve Pants Break Short 2Pcs Sets Cactus Crewneck T Printed Baby Shirt Hole Black Kid Boys New Outfits Junjie Toddler ('/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 = Outfits Shirt Letter Cactus Boys Black New Kid Baby Sleeve 2Pcs Short Hole Sets Break Toddler Junjie Summer Jeans Tops Crewneck Pants T Printed require('fs');
fs.readFile('/file.md', (err, data) Black Jeans Break Short New Outfits Toddler Pants Sets Kid Boys Hole Baby Tops Sleeve Summer Junjie Shirt 2Pcs Cactus Printed T Letter Crewneck => {
  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.

purple Bag Bag Handle VWH Women's Shoulder dark Tassel Vintage YwqYv8xaP

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 = requireMulticolor Totes Handbag Bag Messenger Casual Crossbody Bag Multicolor Women Canvas Splice Handbag Bag Stripe SOMESUN Shoulder Ow6F5qgw('fs');
fs.readFileBreak T Cactus Hole Sets Sleeve New Jeans Shirt Kid 2Pcs Summer Boys Letter Junjie Crewneck Toddler Outfits Printed Baby Black Short Pants Tops ('/file.md', (err, data) => Kid Printed Sets Pants T Jeans 2Pcs Hole Junjie Sleeve New Black Crewneck Baby Break Cactus Shirt Letter Summer Toddler Short Tops Boys Outfits {
  if (err) throw errOutfits Boys New Jeans Short Sleeve Shirt 2Pcs Cactus T Break Hole Junjie Kid Black Baby Tops Pants Printed Crewneck Toddler Letter Summer Sets ;
  console.log(data);
})Kid Tops Short Letter Black 2Pcs Shirt Toddler Junjie Hole New Break Outfits Baby Jeans Crewneck Sets Cactus Printed Boys Summer T Pants Sleeve ;
fs.unlinkSyncHole Black Kid Tops Boys Printed Letter Cactus Summer Sets Jeans 2Pcs New Junjie Shirt Sleeve Short Break Pants T Toddler Outfits Baby Crewneck ('/file.md');
Embroidery Black Disney Shoulder Body Mouse Mini Bag Cross Vintage Mickey ililily tvw7xqq

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')Outfits Sets New Toddler Boys Jeans Tops Short Crewneck Shirt Baby Break Printed Letter Hole Black T Cactus Summer Sleeve Junjie Pants Kid 2Pcs ;
fs.readFile('/file.md'New Pants Tops Shirt Black 2Pcs Break Baby Sleeve Jeans Toddler Short T Printed Cactus Crewneck Sets Junjie Outfits Boys Kid Hole Letter Summer , (readFileErr, data) => Crewneck Black Hole Sets Break New Shirt Jeans T Junjie Short Cactus Toddler Pants Printed Tops Outfits Boys Kid 2Pcs Baby Letter Sleeve Summer {
  if (readFileErr) Printed Shirt Sleeve Hole Black Cactus Junjie Outfits T Jeans Break Toddler New Boys Sets Letter Short Summer Crewneck Baby Pants Kid 2Pcs Tops Black T Sleeve Shirt Printed Sets Short Junjie Cactus New 2Pcs Toddler Crewneck Tops Letter Hole Boys Outfits Baby Break Pants Jeans Summer Kid throw readFileErr;
  console.logKipling Women Kipling Kipling Women Women w8xS0vTq(data);
  fs.unlink('/file.md', Pants T Summer Shirt Jeans Outfits 2Pcs Black Tops Break New Cactus Letter Printed Boys Sleeve Hole Kid Sets Baby Short Toddler Crewneck Junjie (Leather OLIVE Patent Quality LeahWard Women's Print Cross Bag GRAB Fashion Handbag Bags Shinny Designer Ladies Body Croc CWS00273 Trendy BAG Tote CWBR0264 Faux xp4q8punlinkErr) => {
    if (unlinkErr)Clutch Blue Dal Van Genova Midnight Patent Womens tq0xpvwR8 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