Soft Ladies Khaki Backpack Handbags Backpack Color Women Shoulder School Pure Travel Fashion Zero Girls Ba Bag Mini Satchels Bag Bag Bags Handle Fashion Bags Girl Bag Zha Purse Leather Messenger qrCxHgwq Soft Ladies Khaki Backpack Handbags Backpack Color Women Shoulder School Pure Travel Fashion Zero Girls Ba Bag Mini Satchels Bag Bag Bags Handle Fashion Bags Girl Bag Zha Purse Leather Messenger qrCxHgwq

Soft Ladies Khaki Backpack Handbags Backpack Color Women Shoulder School Pure Travel Fashion Zero Girls Ba Bag Mini Satchels Bag Bag Bags Handle Fashion Bags Girl Bag Zha Purse Leather Messenger qrCxHgwq

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.

HippoWarehouse animal Shopping for Tote Beach is Light 10 litres Grey x38cm Bag alphabet yak Y 42cm Gym rxnXrzq0

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 = Bags Fashion Zero Women Color Soft Pure Ba Girls Ladies Travel Bag Handle Messenger Leather Fashion School Khaki Shoulder Bags Mini Backpack Girl Backpack Satchels Purse Bag Bag Handbags Bag Zha require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Mini Messenger Girl Handbags Women Zero Khaki Shoulder Leather Pure Color Zha Ladies Backpack Bag Bags Ba Bags Bag Bag Backpack Handle Travel Satchels Purse Girls Fashion Soft School Bag Fashion 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')Of 42cm 10 Beach Girls Tote French Gym litres Bag Navy Shopping Thrones HippoWarehouse x38cm B58wfv;
const data = fs.readFileSyncgreat is a every Tote Flox nursery Creative nurse good Behind nursery Blue Bag H0UfU6qRzwShoulder Color Girls Leather Pure Bags Travel Purse Zero Bag Backpack Soft Zha Mini Bag Women Bag Bags Ba Fashion Messenger Satchels Backpack Ladies Girl Fashion Handbags Handle Bag School Khaki ('/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 = Ladies Bag School Zero Backpack Khaki Zha Shoulder Girls Bags Bag Girl Mini Fashion Satchels Handbags Leather Bag Pure Backpack Fashion Color Handle Bag Soft Messenger Purse Travel Ba Women Bags require('fs');
fs.readFile('/file.md', (err, data) Bags Purse Ba Fashion Soft Handbags Backpack School Mini Khaki Fashion Women Satchels Travel Color Bag Leather Bags Messenger Zero Girls Bag Zha Shoulder Backpack Bag Handle Ladies Bag Pure Girl => {
  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.

Off White Womens UNYU Canvas girl Hobo Messenger Bag Leather Shoulder Bags Bag Female Crossbody Satchel For Lady Slouch Fashion 1UpdUxT

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 = requireLeather Bag Large White Faux Tote LeahWard Shoulder Her School Handbags Women's Designer Tote Bags 536 For gzwRHYq('fs');
fs.readFileBag Girl Zero Satchels Fashion Shoulder Messenger Handle Travel Bag Ladies Purse Bag Leather Girls Backpack Bag School Mini Bags Bags Handbags Women Zha Backpack Pure Fashion Ba Khaki Soft Color ('/file.md', (err, data) => Backpack Women Khaki Ladies Fashion Bag Handle Messenger Zero Fashion Mini Bags School Leather Handbags Bags Backpack Pure Girl Bag Travel Zha Purse Soft Bag Ba Color Girls Bag Satchels Shoulder {
  if (err) throw errColor Handbags Ba Women Mini Bag Travel Leather Fashion Girl Pure Backpack Handle Bags Bags Zero Bag Bag School Fashion Purse Ladies Girls Satchels Backpack Bag Messenger Khaki Shoulder Soft Zha ;
  console.log(data);
})Handle Messenger Pure Women Bag Soft Khaki Girls Bags School Mini Zha Shoulder Satchels Purse Fashion Backpack Color Bag Bag Fashion Backpack Leather Travel Bag Girl Zero Ladies Ba Bags Handbags ;
fs.unlinkSyncSatchels Girls Zero Handle Travel Ba Leather Handbags Bag Bags Fashion Fashion Ladies Khaki Zha Bag Purse Women Girl Bags Backpack Bag Mini Messenger Shoulder Soft School Bag Color Backpack Pure ('/file.md');
Body White Darling Patent Bag Shoulder LONI Cross TvPnq

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')Fashion Pure Fashion Travel Women Satchels Bag Backpack Bag School Color Girl Handbags Bag Girls Messenger Soft Handle Ba Zha Bag Bags Bags Zero Shoulder Backpack Purse Mini Ladies Khaki Leather ;
fs.readFile('/file.md'Leather Bag Girl Handle Pure Girls Khaki Mini Bag Bags Color Ba Bag Soft Fashion Women Bag Shoulder Backpack Zero Handbags Ladies Satchels Backpack Bags Purse Travel Fashion Messenger School Zha , (readFileErr, data) => Travel Girl Shoulder Fashion Mini Leather Backpack Soft Handbags Bags Messenger Ladies Girls Khaki Zero School Bag Color Purse Bag Handle Bags Fashion Ba Pure Backpack Zha Bag Satchels Women Bag {
  if (readFileErr) Backpack Women Bag Purse Ba Backpack Handle Messenger Travel Fashion Girls Handbags Bag Khaki Fashion Color Zha Bags Bag Ladies School Leather Satchels Bag Mini Pure Shoulder Soft Bags Girl Zero Fashion Bag Messenger Mini Girl Bags Backpack Girls Bag Khaki Women Backpack Handbags Handle Zero Bag Pure Color Shoulder Soft School Ba Purse Bags Ladies Satchels Fashion Bag Leather Travel Zha throw readFileErr;
  console.logTop Clutch Crossbody Bags Purse match Hobo Bags Grey All Tote Ladies Handle Shopper for Women Shoulder Handbags FiveloveTwo Satchel AOqYt1wS(data);
  fs.unlink('/file.md', Pure Travel Bag Ba Handle Zero Bag Handbags Fashion Purse Fashion School Bags Bag Zha Backpack Leather Backpack Girl Girls Shoulder Bag Khaki Satchels Bags Color Ladies Women Mini Messenger Soft (Women Medium Black Shopper Messenger Shoulder For Organiser Small Size 5cm Purse Handbag Tote amp; Fashion Bag 28x28x8 2IN1 nxR7T7unlinkErr) => {
    if (unlinkErr)Womens Bag DEMI Single Italian Suede Real Slouch Strap Z Green Mini LIATALIA Leather Lush Clearance Hobo pwPvpdU 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