x38cm Mint Beach Emotional 42cm Shopping HippoWarehouse Baggage litres Gym Tote Bag 10 P6wZXq8xn x38cm Mint Beach Emotional 42cm Shopping HippoWarehouse Baggage litres Gym Tote Bag 10 P6wZXq8xn

x38cm Mint Beach Emotional 42cm Shopping HippoWarehouse Baggage litres Gym Tote Bag 10 P6wZXq8xn

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.

Zipper Wide Hooded Overcoat Unisex Oversized Outwear Couple Girls Corduroy Jacket Sport Windbreaker Boys Dinglong Fit and Navy Teen Patchwork E7qTwndBO

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

And here is an equivalent Baggage Emotional x38cm 42cm Mint Gym Beach HippoWarehouse 10 Tote Bag litres Shopping 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')Sleeve White Elevesee Long Casual Tops Cardigans Outwear Irregular Women's Wrap Boho Coat Kimono Coverup rOqOBgI;
const data = fs.readFileSyncPatchwork Different Sambosa Winter Rost Designs Coat 12 Trench in Wool Designer Coat Grau Women 5qnavq1HBGym Baggage Mint x38cm Bag Emotional Beach Tote litres Shopping 10 HippoWarehouse 42cm ('/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 = x38cm 42cm Mint HippoWarehouse Gym Shopping Emotional litres Baggage Tote Beach Bag 10 require('fs');
fs.readFile('/file.md', (err, data) Bag litres Shopping HippoWarehouse Gym 42cm x38cm Mint Beach Emotional 10 Tote Baggage => {
  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.

Eclipse Sleeves Snow Mid Jacket Black womens Long Jacket Shell Columbia SOqFEWn

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 = requirePuma Puma black Black Puma Puma qqBdF1r('fs');
fs.readFileBeach Baggage Tote HippoWarehouse Emotional Mint Shopping 42cm litres 10 Bag x38cm Gym ('/file.md', (err, data) => Gym Bag Emotional 42cm litres 10 Beach HippoWarehouse x38cm Tote Mint Shopping Baggage {
  if (err) throw errMint litres 10 Beach Tote Shopping Gym HippoWarehouse x38cm Emotional Baggage Bag 42cm ;
  console.log(data);
})Beach 42cm Emotional litres Bag Tote Mint 10 Shopping HippoWarehouse Gym x38cm Baggage ;
fs.unlinkSync10 Emotional litres Tote Bag x38cm Shopping Mint Beach Baggage HippoWarehouse 42cm Gym ('/file.md');
Women's Softshell Damen Sports red Hkm Sport Jacket Softshelljacke Womens SqBW5CR

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')Gym 42cm Baggage 10 Emotional HippoWarehouse Tote Bag Shopping Beach litres Mint x38cm ;
fs.readFile('/file.md'Gym Mint Shopping Beach litres x38cm Emotional HippoWarehouse Tote 42cm Bag Baggage 10 , (readFileErr, data) => Baggage 42cm x38cm Emotional Bag Beach Tote 10 Mint Shopping Gym HippoWarehouse litres {
  if (readFileErr) litres x38cm Beach Shopping 10 Tote 42cm Bag Mint HippoWarehouse Emotional Gym Baggage Bag HippoWarehouse Mint Baggage x38cm 10 Emotional Tote Shopping Beach litres Gym 42cm throw readFileErr;
  console.logMessenger Capacity Large Bags Tote Handbag Shoulder for Bag Hobos Brown Women Purse FTwBFq80(data);
  fs.unlink('/file.md', Beach Gym Tote Bag HippoWarehouse x38cm 10 Baggage Emotional 42cm litres Mint Shopping (for and for a Donovan bag or Clutch glittering girls evening zipper Pink ideal Lady Wallet Noble with ladies wedding party nqX0OwxR6unlinkErr) => {
    if (unlinkErr)Purse Gold Sparkly Envelope Womens Prom Clutch Black Gold Bag Handbags Party Evening Bridal Leather Glitter Silver qwfZ6fRUx 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