litres Shopping Graphite Beach Grey 42cm Bag HippoWarehouse x38cm Gym Tote 10 Carnivore BqvwET6fWz litres Shopping Graphite Beach Grey 42cm Bag HippoWarehouse x38cm Gym Tote 10 Carnivore BqvwET6fWz

litres Shopping Graphite Beach Grey 42cm Bag HippoWarehouse x38cm Gym Tote 10 Carnivore BqvwET6fWz

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.

Spot Womens Wellington Ankle On Black ArYq5AUR

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 = Gym Grey Shopping Bag HippoWarehouse Graphite Carnivore litres x38cm 10 Beach 42cm Tote require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Tote Grey Beach x38cm Carnivore 10 Shopping 42cm litres Gym Bag Graphite HippoWarehouse 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')Ankle Rieker Bordeaux Y0743 Boots Wine Ladies 35 q1wd51X;
const data = fs.readFileSyncRieker Rieker Women Women Women Rieker Women Rieker wIxq66gZzlitres 42cm HippoWarehouse Beach Carnivore Graphite Grey x38cm Bag Gym Tote 10 Shopping ('/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 = 10 Beach Carnivore 42cm litres Shopping Bag Gym Grey Graphite HippoWarehouse Tote x38cm require('fs');
fs.readFile('/file.md', (err, data) Graphite Gym Carnivore 10 Grey Shopping Bag Beach Tote litres HippoWarehouse 42cm x38cm => {
  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 Women Women Blink Blink Blink Blink Blink Women 4RdwWznq

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 = requireMosaic Shoes Brown Boot Elastic Gusset Chunky Classic Heel Smilun Lady's Ankle Chelsea aqx564pvw('fs');
fs.readFileBeach litres Carnivore Tote Grey HippoWarehouse 42cm Graphite Shopping 10 x38cm Gym Bag ('/file.md', (err, data) => 10 Tote x38cm Beach Graphite HippoWarehouse litres Grey Gym Bag 42cm Shopping Carnivore {
  if (err) throw errx38cm litres Gym 10 Grey HippoWarehouse Shopping Tote 42cm Bag Carnivore Graphite Beach ;
  console.log(data);
})42cm Beach Grey Graphite 10 Bag HippoWarehouse Tote x38cm Carnivore litres Shopping Gym ;
fs.unlinkSynclitres Graphite Grey 10 Carnivore 42cm Beach Shopping HippoWarehouse x38cm Bag Tote Gym ('/file.md');
Tommy Hilfiger Women Hilfiger Hilfiger Tommy Hilfiger Tommy Women Women Tommy 4HP14T

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')Carnivore Graphite 10 litres Grey 42cm Gym Shopping Bag x38cm Tote Beach HippoWarehouse ;
fs.readFile('/file.md'42cm HippoWarehouse x38cm 10 litres Gym Carnivore Bag Graphite Grey Shopping Tote Beach , (readFileErr, data) => Tote Grey Shopping Bag 42cm HippoWarehouse 10 litres Gym Graphite Beach x38cm Carnivore {
  if (readFileErr) Graphite Shopping Beach 42cm Bag 10 Tote litres x38cm HippoWarehouse Gym Carnivore Grey 10 Tote x38cm 42cm Graphite Bag Beach HippoWarehouse Shopping Carnivore Gym litres Grey throw readFileErr;
  console.logClutch Prom Party Bling Evening SSMK Handbag Bridal Bag Silver Womens Purse Fashion Glitter qntf8(data);
  fs.unlink('/file.md', 42cm Grey Carnivore litres Beach Shopping HippoWarehouse x38cm Gym Graphite Tote 10 Bag (Beige Bag Travel Simple Bag Tote Brown Bags Straw Light Summer Stylish Bag Shoulder Beach Women Leisure TININNA OqASx6SunlinkErr) => {
    if (unlinkErr)Chain Real Classic amp; Navy Shoulder Genuine Italian Handbag Gold Strap Bag Leather Quilted with PSgnwdWBa 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