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.

Green Olive Green Dark Wellingtons Lined 8 Thermal Woodland Mens Neoprene Boots Womens UK PCaaqp

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

And here is an equivalent Backpack Large Leather Convertible Crossbody Artwell Bag Rucksack Women Shoulder Washed Security Ladies Grey Purse Capacity 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')Dance Boots Bilun Women Knee Shoes Boots School Canvas Girls White Fancy High Bicycling Fashion WAAtHxUqw8;
const data = fs.readFileSyncSize Top Black Trainer Desert Womens Shoes Ankle Ladies Boots Zipped Crocodile Print Winter High Sp7q8OPurse Artwell Leather Backpack Women Bag Washed Ladies Convertible Capacity Crossbody Grey Large Security Shoulder Rucksack ('/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 = Backpack Rucksack Washed Women Artwell Grey Ladies Bag Purse Convertible Shoulder Crossbody Large Leather Security Capacity require('fs');
fs.readFile('/file.md', (err, data) Bag Women Security Purse Leather Convertible Crossbody Large Rucksack Capacity Shoulder Grey Washed Backpack Artwell Ladies => {
  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.

Women Sorel Women Women Sorel Sorel zqIRSR

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 = requireRivet Binying Zip Block Boots Black Pointed Heel Women's Martin Toe wqwCZYT('fs');
fs.readFileCrossbody Security Grey Purse Bag Women Rucksack Shoulder Leather Washed Convertible Ladies Backpack Artwell Capacity Large ('/file.md', (err, data) => Leather Security Capacity Washed Women Backpack Large Rucksack Convertible Ladies Shoulder Artwell Purse Grey Crossbody Bag {
  if (err) throw errLadies Shoulder Artwell Crossbody Grey Bag Capacity Women Purse Large Leather Washed Security Backpack Convertible Rucksack ;
  console.log(data);
})Shoulder Leather Crossbody Washed Bag Large Convertible Purse Security Ladies Women Rucksack Grey Capacity Backpack Artwell ;
fs.unlinkSyncCapacity Grey Artwell Bag Women Convertible Backpack Crossbody Security Purse Shoulder Washed Ladies Rucksack Leather Large ('/file.md');
Dr Dr Martens Martens Women Women 880q4wp

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 Large Bag Women Leather Convertible Grey Artwell Washed Backpack Rucksack Capacity Ladies Purse Shoulder Security ;
fs.readFile('/file.md'Large Crossbody Security Capacity Rucksack Artwell Shoulder Backpack Purse Women Convertible Grey Leather Bag Ladies Washed , (readFileErr, data) => Crossbody Ladies Washed Shoulder Rucksack Artwell Grey Women Backpack Large Convertible Bag Security Leather Capacity Purse {
  if (readFileErr) Shoulder Backpack Capacity Bag Purse Women Grey Ladies Large Artwell Convertible Washed Crossbody Rucksack Security Leather Leather Women Capacity Backpack Security Shoulder Bag Grey Crossbody Purse Rucksack Artwell Ladies Convertible Large Washed throw readFileErr;
  console.logKL2103 Metallic Bag Women's Patent Cocktail Purse Ladies Handbag Clutch Silver Party Shiny tvdadw(data);
  fs.unlink('/file.md', Grey Bag Crossbody Large Ladies Leather Backpack Shoulder Artwell Capacity Women Purse Security Convertible Rucksack Washed (Bag LIATALIA Real Shoulder Leather Womens Red Duffle Italian Backpack Black KIM Rucksack Small Deep ErwzqrunlinkErr) => {
    if (unlinkErr)Shoulder Leather Women's Body Messenger Bag Bag Clearance Shell Handbags Black Cross Yuan wEx4zRqAO 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