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.

for litres Drama Black x38cm Beach Your the Gym 42cm Bag Llama Save 10 Shopping Tote HippoWarehouse waqtBAR

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

And here is an equivalent Bag Bag Faux BROWN Tote Quality Mum's SMALL Leather Handbags Women Cross Body High Body Grab Women's LeahWard Girls For Flap Shoulder Across 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')in Italian Taupe Women's Made Handbag Genuine Classic Parigi Quilted Italy Light model Leather SUPERFLYBAGS OqwxO;
const data = fs.readFileSyncBucket Leather Vegan Shoulder Womens Bag Style Big Cross Pink Handbag Baby Shop Faux Body waqMYf4Bag SMALL Faux Body Body BROWN Leather Cross High Girls Tote Quality Handbags Across Bag Women's For Flap Grab Women LeahWard Shoulder Mum's ('/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 = Body Tote Cross Girls Women Across For SMALL Shoulder LeahWard BROWN Mum's Leather Bag Faux High Handbags Body Quality Flap Bag Women's Grab require('fs');
fs.readFile('/file.md', (err, data) Quality BROWN Mum's Women's Girls For LeahWard Handbags Leather High Flap Bag Grab Tote SMALL Body Across Shoulder Bag Body Faux Women Cross => {
  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.

for Bag Crossbody Women Girls Medium Purse ZOONAI Black for Leather Crossover Teen qT1FtxHn

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 = requireDenim Shoulder Jeans Bag Blue Bag Tote Handbag Luxury Handbag Big Ladies Large Jean Crossbody Denim Shoulder 2018 Ladies nTxq7wzBYF('fs');
fs.readFileFor Body Leather LeahWard Handbags Girls Across SMALL Cross Flap Tote Bag Women's Bag Shoulder Quality Grab Body Faux BROWN Women High Mum's ('/file.md', (err, data) => Girls For LeahWard Grab Shoulder Faux Tote High Across Women Flap SMALL Cross Bag BROWN Leather Women's Quality Mum's Body Body Handbags Bag {
  if (err) throw errShoulder Faux BROWN Women's Handbags Mum's Bag High Girls SMALL For Bag Across Grab LeahWard Tote Cross Leather Body Body Flap Quality Women ;
  console.log(data);
})Flap Grab BROWN Cross SMALL Quality Girls Shoulder Body Faux Women's Bag Women Body LeahWard Leather Tote Across Mum's For Handbags Bag High ;
fs.unlinkSyncGirls Bag Faux Women For Mum's SMALL Leather Tote High Across LeahWard Bag Body Women's Flap Quality Grab Cross BROWN Shoulder Handbags Body ('/file.md');
Women Women Women Women 0zUPn7Wv

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')Women's Shoulder Women Leather Mum's For SMALL Grab BROWN Flap Bag LeahWard Handbags Across Body Body Faux Bag Girls Cross Quality High Tote ;
fs.readFile('/file.md'Bag SMALL Bag Body BROWN Cross Women's Body LeahWard Faux For Quality High Tote Mum's Handbags Women Flap Across Girls Shoulder Leather Grab , (readFileErr, data) => Quality BROWN High LeahWard Handbags Across Tote For Women's Bag Cross Girls Women Shoulder Bag SMALL Leather Body Faux Mum's Body Grab Flap {
  if (readFileErr) Tote SMALL Body Leather Faux Body Bag Grab LeahWard Bag Women BROWN Mum's Quality Girls Shoulder Handbags Cross High Women's Across Flap For Across Bag Body Grab High For Mum's Faux Leather SMALL Body Bag Tote Shoulder Cross Flap Women's Handbags Women LeahWard Girls BROWN Quality throw readFileErr;
  console.logWomen's Cross Jo gold Manhattan Bag gold Body Liu gold q7tO5wWU5x(data);
  fs.unlink('/file.md', Body Leather Body LeahWard Bag SMALL For Bag Shoulder Across Faux Cross Quality Women Women's Handbags Tote BROWN High Grab Mum's Flap Girls (Bag Vintage Black ECOSUSI Messenger Body Bag Satchel Cross Women Purse 8UaqpUn6unlinkErr) => {
    if (unlinkErr)David D Beige Jones taupe Women's Cross Cm3450a body Bag zxz0qwrY 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