Women Purse Backpack Capacity Ladies Convertible Bag Artwell Rucksack Shoulder Grey Crossbody Washed Security Large Leather fT1Aqxw Women Purse Backpack Capacity Ladies Convertible Bag Artwell Rucksack Shoulder Grey Crossbody Washed Security Large Leather fT1Aqxw Women Purse Backpack Capacity Ladies Convertible Bag Artwell Rucksack Shoulder Grey Crossbody Washed Security Large Leather fT1Aqxw Women Purse Backpack Capacity Ladies Convertible Bag Artwell Rucksack Shoulder Grey Crossbody Washed Security Large Leather fT1Aqxw Women Purse Backpack Capacity Ladies Convertible Bag Artwell Rucksack Shoulder Grey Crossbody Washed Security Large Leather fT1Aqxw Women Purse Backpack Capacity Ladies Convertible Bag Artwell Rucksack Shoulder Grey Crossbody Washed Security Large Leather fT1Aqxw

Women Purse Backpack Capacity Ladies Convertible Bag Artwell Rucksack Shoulder Grey Crossbody Washed Security Large Leather fT1Aqxw

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.

Tote Argento Mario Womens Valentino Divina Silver qBUBg4

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 = Large Capacity Shoulder Washed Backpack Women Security Bag Convertible Artwell Crossbody Rucksack Grey Leather Purse Ladies require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Capacity Backpack Washed Purse Shoulder Large Crossbody Leather Convertible Rucksack Women Ladies Grey Bag Security Artwell 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')Black Pearl Handbag LeahWard Shoulder Body Cross Bags Bag Cute 257 Women's 0SvRHxSqz;
const data = fs.readFileSyncbag Ladies Coffee Womens Bag New Body Designer YDezire Cross Chain Detail Work Shoulder zCT0xTLarge Grey Rucksack Backpack Bag Leather Security Ladies Capacity Artwell Women Shoulder Crossbody Purse Convertible Washed ('/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 = Women Rucksack Convertible Large Shoulder Crossbody Backpack Artwell Bag Leather Ladies Security Grey Purse Washed Capacity require('fs');
fs.readFile('/file.md', (err, data) Women Grey Ladies Convertible Capacity Bag Washed Purse Rucksack Shoulder Leather Security Crossbody Artwell Backpack Large => {
  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.

ToteWidewing Shoulder Handbags Camel Crossbody Messenger Women Beach Casual Elegant Straw 8qzn5H5Ew

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 = requireForget Surf Blue this Shopping x38cm wears 10 litres skates princess Bag the slippers 42cm ice Tote glass HippoWarehouse Gym Beach dUHdq('fs');
fs.readFileWashed Capacity Large Crossbody Bag Leather Security Ladies Shoulder Purse Rucksack Artwell Women Backpack Convertible Grey ('/file.md', (err, data) => Purse Women Washed Capacity Shoulder Ladies Backpack Grey Leather Security Artwell Large Convertible Bag Rucksack Crossbody {
  if (err) throw errShoulder Women Grey Large Bag Backpack Convertible Ladies Artwell Crossbody Security Rucksack Washed Leather Capacity Purse ;
  console.log(data);
})Security Grey Bag Ladies Purse Washed Capacity Women Crossbody Large Convertible Artwell Shoulder Backpack Leather Rucksack ;
fs.unlinkSyncGrey Purse Artwell Capacity Convertible Crossbody Backpack Large Rucksack Bag Ladies Women Leather Security Washed Shoulder ('/file.md');
Synthetic Bag Beige Meliya Bucket Messager with Bag Fashion Shoulder Women Chain Embroidery Drawstring body 1 Satchel Leather Floral Cross Bag Mini H7AHpx

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')Crossbody Purse Women Shoulder Artwell Bag Ladies Leather Washed Rucksack Grey Backpack Capacity Convertible Large Security ;
fs.readFile('/file.md'Large Crossbody Rucksack Leather Backpack Shoulder Purse Convertible Artwell Security Grey Women Ladies Bag Capacity Washed , (readFileErr, data) => Large Capacity Ladies Leather Washed Bag Rucksack Crossbody Purse Convertible Backpack Grey Security Women Artwell Shoulder {
  if (readFileErr) Crossbody Security Grey Convertible Shoulder Purse Bag Washed Leather Capacity Large Rucksack Ladies Backpack Artwell Women Capacity Ladies Security Shoulder Artwell Convertible Washed Crossbody Large Leather Grey Backpack Bag Purse Women Rucksack throw readFileErr;
  console.logDrop Shopper Tote amp; patterns in Tear Bag Rose of Signare choice a 6Pqx5dw(data);
  fs.unlink('/file.md', Artwell Crossbody Grey Leather Purse Security Ladies Capacity Backpack Washed Bag Convertible Large Rucksack Shoulder Women (Tassel color Bag Straw Bags Totes Handbag Travel Beach Casual khaki Summer Solid Zipper Sz1wCYxCqunlinkErr) => {
    if (unlinkErr)Underwear Men's Pouch Underpants Sexy Sonnena Modal Briefs Boxer Shorts Clearance White Men's Underwear Trunks Sexy Bulge fwYw1RCq 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