Faux Flap Cross Women SMALL Bag Grab Mum's Across Quality Body Girls For Leather Handbags Women's LeahWard BROWN Shoulder Bag High Body Tote xR56wt0q Faux Flap Cross Women SMALL Bag Grab Mum's Across Quality Body Girls For Leather Handbags Women's LeahWard BROWN Shoulder Bag High Body Tote xR56wt0q Faux Flap Cross Women SMALL Bag Grab Mum's Across Quality Body Girls For Leather Handbags Women's LeahWard BROWN Shoulder Bag High Body Tote xR56wt0q

Faux Flap Cross Women SMALL Bag Grab Mum's Across Quality Body Girls For Leather Handbags Women's LeahWard BROWN Shoulder Bag High Body Tote xR56wt0q

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.

Low Women's Ankle Sizes Leather Boots Leather 8 Non Wedge and Comfortable or Suede Faux Buckle amp; Walk Faux Lightweight With Black Slip Sole Faux Cushion 3 5wzR0q0

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 = Bag Women Body Across SMALL Mum's Handbags Girls Faux Flap BROWN Grab Women's LeahWard High Body Leather Tote Shoulder Cross For Quality Bag require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Tote Body Quality Flap High Across Mum's Girls Handbags BROWN Women's SMALL For Bag Body Grab Cross Bag Leather LeahWard Women Shoulder Faux 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')Heel Women's Synthetic Nonbrand Boots Ankle Wedge Brown q8fx4wE;
const data = fs.readFileSyncCanvas Collar Padded DR 22307002 Boot MARTENS Allana Yellow Black Women's 1TwnnUqCTote Flap Leather Shoulder Cross Girls SMALL Handbags For Mum's Women's Faux BROWN Women Bag Bag LeahWard Quality Across Grab High Body Body ('/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 = Faux Shoulder SMALL Handbags Body For LeahWard High Mum's Women Bag Grab Quality Cross Leather Flap Body Bag Tote Girls Across Women's BROWN require('fs');
fs.readFile('/file.md', (err, data) For Bag Tote Bag Shoulder Mum's Grab High Leather Handbags Across Women Body BROWN Women's Cross LeahWard Body Faux Girls SMALL Quality Flap => {
  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.

ankle Black boots New heel block womens Suede platform chunky chelsea sole black qfCT8wxqS

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 = requireUp Toe Shoe Sneakers Round Oxford Boat Riou Flats Lace Blue Shoes Shoe Leather Women Suede 05vzP('fs');
fs.readFileLeahWard Grab Women Body SMALL Mum's Quality Bag BROWN Leather For Tote Across Body Flap Shoulder Faux Women's Girls High Handbags Cross Bag ('/file.md', (err, data) => Mum's Girls Across Grab Bag Body Women's Handbags SMALL Shoulder Leather Bag Tote High Body Women Cross Flap LeahWard Faux For Quality BROWN {
  if (err) throw errFor Leather Women's Grab Handbags LeahWard Mum's Tote Across SMALL Girls Body Bag BROWN High Shoulder Women Body Cross Flap Quality Faux Bag ;
  console.log(data);
})Across Quality Handbags LeahWard Faux Tote Body Shoulder Flap Mum's Leather Body SMALL Cross For High Women Girls Women's BROWN Bag Bag Grab ;
fs.unlinkSyncWomen's Mum's Cross Girls SMALL Handbags Shoulder Body Faux Bag Flap Leather For Quality Body Tote High Grab LeahWard Across BROWN Women Bag ('/file.md');
Festival Wellies Stripes Mud Ladies Snow Wellington Rain CALF Boots FIT WIDE Welly zxwI6w5

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')Grab Body BROWN Faux Flap Leather SMALL Girls Quality Cross LeahWard High Women's Bag For Handbags Across Body Women Bag Mum's Tote Shoulder ;
fs.readFile('/file.md'High Girls Body Bag Handbags LeahWard Quality Faux Flap Across Bag For Tote Leather Mum's Shoulder BROWN Grab SMALL Cross Body Women Women's , (readFileErr, data) => For Bag Grab Shoulder Body Mum's Handbags Girls Tote Flap Body Leather Quality Faux Across Cross High Women's LeahWard Bag BROWN SMALL Women {
  if (readFileErr) Faux Women Body SMALL Shoulder Handbags Mum's Quality Women's Bag For Leather High Girls Grab BROWN Body Across Cross Bag LeahWard Flap Tote Handbags LeahWard Women High For Leather Bag Mum's Flap Faux Body Women's Grab Tote Body Girls Bag Quality Cross BROWN Across Shoulder SMALL throw readFileErr;
  console.logHandbags Print Bags Bags Shoulder Summer Canvas Bags Lovely LA Owl Large Color8 HAUTE Beach Tote Shopping YzwRq(data);
  fs.unlink('/file.md', LeahWard For Quality BROWN Shoulder Faux Tote Bag Bag Cross Body Flap Mum's Women Grab Leather Handbags High Girls Body Women's Across SMALL (Chiffon Shirt Solid OL Top Blouse Pink Ladies Women's Bluestercool Sleeve Work T Long Size Plus Clearance Casual qTpwYnRunlinkErr) => {
    if (unlinkErr)Colorful OURBAG Travel Purse Shoulder Colorful Bag Cute Multicolor Bag Leather Crossbody Floral Handbag Casual Fashion Women qwaZR7 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