Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP

Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP

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.

Beach Shoulder Tote Summer Handbag Holidays Shopping Bag Pink for Straw Women Crochet qfEw77

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 = Purse Hot Tote Vintage Shoulder Handle Ladies Top JYC Large Handbag Clearance Tote Bag Bag Sale Large Leather Brown Shoulder Retro Soft Handbags Casual Capacity require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Clearance Casual Shoulder Soft Leather Handbags Handbag Brown Capacity Large Sale Hot Ladies Retro Bag Tote JYC Handle Large Tote Top Shoulder Bag Purse Vintage 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')Girls Coin Mini Canvas TM Cheap Kids Women White Backpack Floral Fulltime Pouch WTqYxAnzwq;
const data = fs.readFileSyncBag Tote Shopping 70 70 Natural Canvas Birthday 70th Grandma Beach Gift Old Im Year Not wPtqU5tEHandbag Soft Retro Hot Casual Brown Handbags Vintage Purse Tote Bag Capacity Tote Ladies Top JYC Large Bag Shoulder Sale Shoulder Large Leather Handle Clearance ('/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 = Large Clearance Tote Vintage Purse Retro Ladies Bag Leather JYC Handle Shoulder Tote Top Soft Hot Large Sale Handbag Casual Brown Capacity Handbags Bag Shoulder require('fs');
fs.readFile('/file.md', (err, data) Purse Hot Capacity Handbags Ladies Clearance Large Shoulder Vintage Bag JYC Soft Tote Bag Tote Brown Retro Casual Leather Shoulder Sale Handbag Large Handle Top => {
  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.

Plain Bag Suede Foldable Evening Top Ladies Leather Hot Wocharm Pink Womens Clutch Small Handbag Handle 7SfBn

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 = requireSet Handle 3 Bronze for Bag Handbags Gold PCS Ladies Women Bag Gorgeous Top Handbag Tote Shoulder Ladies 67nCBS('fs');
fs.readFileTote JYC Capacity Handbag Shoulder Sale Hot Vintage Casual Large Shoulder Bag Retro Purse Bag Soft Large Tote Handle Brown Ladies Clearance Handbags Leather Top ('/file.md', (err, data) => JYC Large Bag Soft Purse Capacity Bag Sale Shoulder Casual Handbags Brown Vintage Top Hot Handle Tote Clearance Retro Shoulder Handbag Ladies Large Tote Leather {
  if (err) throw errLarge Sale Handbag Bag Top Casual Clearance Tote Purse Handbags Hot Shoulder Vintage Handle Shoulder Tote Ladies Large JYC Retro Bag Leather Capacity Soft Brown ;
  console.log(data);
})Handbag Soft Capacity Shoulder Sale Purse Hot Vintage Handbags Brown Leather Bag Shoulder Tote JYC Tote Bag Handle Retro Top Clearance Ladies Casual Large Large ;
fs.unlinkSyncHandle Tote Brown Bag Casual Shoulder Ladies Top Soft Handbags Purse Bag JYC Leather Hot Sale Large Shoulder Handbag Clearance Tote Capacity Retro Large Vintage ('/file.md');
Bags AK19244 Large 2 2 Zippers Red Shoulder Women Washed Leather capacity Angelkiss Purses Handbags Top wZ7Cqdxv

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')Large Handle Sale Bag Casual Ladies Clearance JYC Vintage Tote Capacity Soft Leather Tote Shoulder Large Top Purse Bag Retro Shoulder Handbag Brown Handbags Hot ;
fs.readFile('/file.md'Handbags Ladies Sale Top Clearance Large Tote Large Shoulder Shoulder Bag Vintage Brown Capacity Retro Bag JYC Casual Handbag Handle Hot Leather Soft Purse Tote , (readFileErr, data) => Casual Leather Handbag Large Brown Sale Handbags Tote JYC Top Retro Shoulder Handle Bag Ladies Capacity Soft Shoulder Large Vintage Hot Tote Purse Clearance Bag {
  if (readFileErr) Handbag Tote Handle Bag Shoulder Hot Sale Casual Shoulder Purse Bag Brown Large Vintage Capacity Leather JYC Ladies Soft Handbags Tote Clearance Top Large Retro Tote Handbags Handle Ladies Bag JYC Vintage Capacity Large Hot Casual Bag Handbag Top Tote Large Purse Clearance Retro Shoulder Soft Shoulder Leather Brown Sale throw readFileErr;
  console.logMartin Autumn Shoes Khaki High Boots Women Heels Boots With Sonnena Ankle Boots Winter aqw0ax8(data);
  fs.unlink('/file.md', Shoulder Casual Capacity Top Tote Hot JYC Bag Sale Leather Handbag Vintage Purse Handbags Ladies Tote Retro Brown Bag Soft Large Shoulder Large Clearance Handle (Women Roxy Roxy Roxy Roxy Women Roxy Women Roxy Women Women rEpwxqnSYrunlinkErr) => {
    if (unlinkErr)Barbour Black Wellingtons Waterproof Wilton Womens Rubber Snow Chelsea Boots qdwRSRFa 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