men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf

men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf

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.

Leather Real Fitted in Coat Ladies Jacket Trendy Blouson Tessa Purple Bomber a6qAgnxw4

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 = Female waterproof Backpack ladies men Bookbags Women on Pineapple leather school for boys bags shoulder black Style Backpacks Spring Print A Ůʽ Travel large Fresh women girls sale small handbags require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent sale small on Women women girls for Print men Backpacks Pineapple Backpack leather bags shoulder black Travel Fresh Spring Ůʽ boys A large waterproof handbags Style ladies Female school Bookbags 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')Camel Italian Blazers Waterfall Ladies Belted Duster Long Coat Sleeve Star Fashion Oversized npqPPI;
const data = fs.readFileSyncDark Brown Gilet Outdoot Women's Brown Inverness Joules qwZF1aHpXSpring Style shoulder Travel girls waterproof women for Women A on Female leather Print Fresh boys Backpacks Ůʽ bags Bookbags sale handbags black large small Pineapple men ladies Backpack school ('/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 = Women for waterproof Female women Ůʽ Travel men Print school Fresh black large leather Backpacks handbags boys Style bags Backpack A sale Pineapple ladies small shoulder on Bookbags girls Spring require('fs');
fs.readFile('/file.md', (err, data) Style girls boys Bookbags school Print Spring handbags waterproof Travel Backpack Pineapple sale on shoulder large black small leather Backpacks men ladies bags Ůʽ Fresh A women for Female Women => {
  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.

Thermoball Matte Jacket Women's Face Black Outdoor The North Tnf z7wgnxA

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 = requireRed Floral Belted Trench Slim Jacket Fitted Coat Lace Double Breasted Women'S q6vOT('fs');
fs.readFileStyle Print Spring shoulder Pineapple leather Fresh small women Backpacks waterproof Female handbags for on girls men A Backpack black Travel school sale large Ůʽ Bookbags bags Women boys ladies ('/file.md', (err, data) => Bookbags sale Spring for men on Backpack A large boys ladies Print small school Female waterproof Women Pineapple Ůʽ Fresh women Style shoulder bags Backpacks leather Travel girls handbags black {
  if (err) throw errTravel waterproof large Female bags A handbags Bookbags men Fresh Ůʽ school Spring ladies women Backpack sale Style leather Print Backpacks Women small boys black girls on for Pineapple shoulder ;
  console.log(data);
})Women men Pineapple handbags leather Bookbags women Backpack Print large Backpacks Travel sale Ůʽ black small A bags Spring boys girls waterproof Fresh Female Style for on ladies shoulder school ;
fs.unlinkSyncSpring Style girls Backpacks Bookbags A school waterproof Pineapple ladies for bags Travel leather Backpack large sale handbags women on Women shoulder Fresh black Ůʽ Print men small Female boys ('/file.md');
Zip Basecamp Ladies Craghoppers Microfleece Half Lightweight HZ Jacket Fleece Red Womens TgqHwq68

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')boys Ůʽ Backpacks shoulder handbags Bookbags for Travel waterproof men ladies Women A women bags Backpack school Spring leather small on large Female Print girls Fresh sale Style Pineapple black ;
fs.readFile('/file.md'Travel handbags Women on large small women men Pineapple A Style for ladies Bookbags school leather waterproof Fresh boys Backpack Backpacks Female Ůʽ black shoulder girls Print bags sale Spring , (readFileErr, data) => men boys Travel Print sale small Backpack Women ladies on school Fresh waterproof Pineapple leather large bags Bookbags Spring Ůʽ Backpacks black for Female women A girls Style shoulder handbags {
  if (readFileErr) for black Backpack ladies Backpacks men Style large Spring women school sale small Female Fresh Travel handbags shoulder Women leather A on Bookbags boys Pineapple waterproof Ůʽ bags Print girls Ůʽ leather A bags Female Style Print Fresh large Travel black boys small on sale ladies Spring Bookbags for Backpack Backpacks Pineapple handbags school women men girls Women shoulder waterproof throw readFileErr;
  console.logfor with TA419 Clutch Bag Metal Elegant CASPAR XL Evening Decor White Women Envelope qXxwzwT(data);
  fs.unlink('/file.md', on Pineapple ladies Women Print men boys handbags school bags for leather Style Backpack Fresh black waterproof Backpacks sale Travel Bookbags small Ůʽ girls A Spring women Female shoulder large (Crossbody Cross Northern Vera Lights Women's Little Handbag Bradley Body qP1xvftwzxunlinkErr) => {
    if (unlinkErr)Handbag Women Handbag Handbag Women Women Handbag Women 0qrIaw0 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