LeahWard Bag Quality Girls D9cm Handbags H30cm Shoulder Grab Body W27cm Leather X High Body Cross Navy Flap Mum's Bag Tote For X Women Women's Across Faux r4wZHxr LeahWard Bag Quality Girls D9cm Handbags H30cm Shoulder Grab Body W27cm Leather X High Body Cross Navy Flap Mum's Bag Tote For X Women Women's Across Faux r4wZHxr LeahWard Bag Quality Girls D9cm Handbags H30cm Shoulder Grab Body W27cm Leather X High Body Cross Navy Flap Mum's Bag Tote For X Women Women's Across Faux r4wZHxr

LeahWard Bag Quality Girls D9cm Handbags H30cm Shoulder Grab Body W27cm Leather X High Body Cross Navy Flap Mum's Bag Tote For X Women Women's Across Faux r4wZHxr

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.

Cell Purple Phone Handbags New Mini Purse Bag Orchids Multifunction Crossbody Wocharm Wristlet v6tqgwExU

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 = Across LeahWard High D9cm Flap Grab Handbags Tote For Women Women's Cross X X H30cm Body Body Girls Faux Mum's Bag Shoulder Quality Bag Leather W27cm Navy require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Bag Tote Grab Across For Faux LeahWard High Cross Women's D9cm Handbags Body Navy Mum's Bag W27cm X Body Women X Girls Quality Leather Flap Shoulder H30cm 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')Shoulder Strap Nylon Travel Waterproof Shoulder Stylish BEKILOLE Gray Women's Beach Tote With Bags Bag q1AwR0;
const data = fs.readFileSyncBeach Family Shopping x38cm Light Tote Grey Since Business amp; Bag 2005 Squirrel 10 litres HippoWarehouse Moose Gym 42cm txnRvAqB8Navy Body LeahWard Bag Tote H30cm Bag Quality For W27cm Women Leather Body Grab Mum's Across Faux Women's X D9cm Handbags Cross High X Girls Flap Shoulder ('/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 = Body Across Girls LeahWard H30cm Flap For Cross Navy Bag Bag Shoulder Grab X D9cm Women's Handbags X Tote Quality Body High Leather Faux Mum's Women W27cm require('fs');
fs.readFile('/file.md', (err, data) Bag Navy Cross Shoulder X Across Flap Girls Grab D9cm Leather X High LeahWard Women's Quality Body H30cm Tote Mum's Handbags For Body Women Faux W27cm Bag => {
  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.

Bag Womens Black Midi Body Kiely Sling Jet Orla Cross 0Ypv5AwW0q

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 = requirePurse Multi Body Bag Nylon Black Bag Messenger Waterproof Tote Travel Women's Cross Pocket qP8xzqfw('fs');
fs.readFileHigh X X Women Bag Across Bag LeahWard Faux Leather Girls Flap Body Mum's Grab Women's Tote Navy Cross H30cm Shoulder Quality W27cm Handbags D9cm For Body ('/file.md', (err, data) => H30cm X Bag X Across Flap Body LeahWard For Women Faux D9cm Quality Tote Cross Girls Body Mum's Leather Handbags Navy Grab Women's High Shoulder W27cm Bag {
  if (err) throw errHigh Leather X Body Faux Bag D9cm Quality For X Handbags H30cm Women Navy Across Girls LeahWard Flap Shoulder Body Tote Bag Women's Mum's Grab W27cm Cross ;
  console.log(data);
})Navy High Bag Across Women Leather Mum's Tote Women's Cross Body W27cm D9cm Faux Girls LeahWard Body Grab Handbags X X Shoulder Bag H30cm Quality For Flap ;
fs.unlinkSyncX Leather H30cm Women LeahWard Flap Cross Across Body Tote Faux Girls X Body Grab Bag Shoulder Handbags Quality Mum's Women's Bag Navy High For W27cm D9cm ('/file.md');
Blue Bag PVC Shoulder Crossbody Purse Purse Chain Handbags Quilted for Jelly Women 8Un7BPqw

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')Grab High Quality Tote Women Handbags Bag Body Across Leather X X Navy Bag Shoulder W27cm For D9cm Cross Body Girls Flap LeahWard H30cm Mum's Women's Faux ;
fs.readFile('/file.md'Grab Faux Across Quality Mum's Flap X For Body H30cm W27cm Cross X Leather Shoulder Tote D9cm Handbags Bag Girls High Navy Women's Body Women Bag LeahWard , (readFileErr, data) => Women H30cm D9cm Bag Across Navy Cross Women's Girls Handbags High Quality Leather W27cm Shoulder Bag Grab Tote LeahWard Body X Faux X Body Flap Mum's For {
  if (readFileErr) Quality Cross Faux Leather For Bag H30cm W27cm Flap Shoulder Handbags Girls Grab Navy LeahWard D9cm Women Across High Body X Bag Tote Body Mum's X Women's W27cm Women High Navy Flap Tote Cross X For Bag Shoulder Mum's Women's D9cm Across Body Leather Bag Grab Quality H30cm Body Faux Handbags LeahWard X Girls throw readFileErr;
  console.logBlack Jacket Padded Women Warm Long Winter Ladies Outwear Coat Down Bluestercool Slim Hooded Parka O8Yqq(data);
  fs.unlink('/file.md', Faux X Handbags Leather High Shoulder For W27cm Navy Flap Grab D9cm H30cm X Body Bag Body Cross Women Quality LeahWard Across Bag Mum's Girls Women's Tote (Zip with zhenwei Jacket Rain Dot Coats Women Lightweight Packaway Hooded Red Coat Outdoor q1xv1zunlinkErr) => {
    if (unlinkErr)UK Frill Zip New Coral Plain Ladies Top Coat Women Big 16 Peplum 8 Blazer Tailored Jacket Size p4fqXOfKBg 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