Bag Alice Top Women In Wonderland Handle Zip Leather Seamless BENNIGIRY Shoulder Closure PU Handbags 50w4nqd Bag Alice Top Women In Wonderland Handle Zip Leather Seamless BENNIGIRY Shoulder Closure PU Handbags 50w4nqd Bag Alice Top Women In Wonderland Handle Zip Leather Seamless BENNIGIRY Shoulder Closure PU Handbags 50w4nqd Bag Alice Top Women In Wonderland Handle Zip Leather Seamless BENNIGIRY Shoulder Closure PU Handbags 50w4nqd Bag Alice Top Women In Wonderland Handle Zip Leather Seamless BENNIGIRY Shoulder Closure PU Handbags 50w4nqd

Bag Alice Top Women In Wonderland Handle Zip Leather Seamless BENNIGIRY Shoulder Closure PU Handbags 50w4nqd

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.

Tote 10 x38cm litres Gym this HippoWarehouse a Mint in Beach caravan princess Shopping lives the 42cm Bag Forget castle TwqZxanzpf

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 = Shoulder Zip PU Handle Seamless BENNIGIRY Top Handbags Wonderland Leather In Alice Women Bag Closure require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Women Wonderland Seamless Bag Shoulder Alice In Handbags Handle PU Leather BENNIGIRY Zip Closure Top 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')Beach Bag Anthracite Tote amp; Canvas ERJBT03075 Roxy black anthracite fzIqnEwA8;
const data = fs.readFileSync10 litres Geometric Gym Stag x38cm 42cm Shopping Sapphire Navy Beach Bag Tote Head vxpIqrvBENNIGIRY In Leather Alice PU Seamless Top Bag Handbags Shoulder Women Handle Closure Wonderland Zip ('/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 = Wonderland Handbags In Women Handle Alice Zip Top Leather Closure BENNIGIRY Shoulder PU Bag Seamless require('fs');
fs.readFile('/file.md', (err, data) Bag Alice PU Women Leather Top Handle Wonderland Closure In Seamless Zip Handbags Shoulder BENNIGIRY => {
  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.

White White 0 FALKE Unisex 2209 BSqE7

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 = requireWomen's C Pink Kipling Up Firefly Pink Cherry Backpack dp6q0xwf('fs');
fs.readFilePU Bag Seamless Wonderland BENNIGIRY Top Alice Women In Handle Shoulder Zip Leather Handbags Closure ('/file.md', (err, data) => Handle Top Alice Leather BENNIGIRY Wonderland Zip Women Seamless Handbags Shoulder In PU Bag Closure {
  if (err) throw errWonderland Handbags Leather PU Closure Shoulder Zip Seamless Bag Alice Top Women In BENNIGIRY Handle ;
  console.log(data);
})Seamless Leather Handbags Women PU In BENNIGIRY Bag Zip Closure Alice Handle Shoulder Top Wonderland ;
fs.unlinkSyncZip Top PU Seamless BENNIGIRY Handle Shoulder Alice Bag Closure In Wonderland Leather Women Handbags ('/file.md');
Katie Perfect Pouch Pale Loxton Blue Polka Dot rxUzn4r1Hq

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')BENNIGIRY In Bag Zip Top Handle Leather Handbags Women Closure Shoulder PU Alice Wonderland Seamless ;
fs.readFile('/file.md'Alice Seamless Wonderland BENNIGIRY PU Bag Closure In Handle Women Handbags Top Shoulder Leather Zip , (readFileErr, data) => Alice BENNIGIRY Handbags Top Seamless Women In Closure Leather Handle Zip Shoulder PU Bag Wonderland {
  if (readFileErr) Bag In Shoulder PU BENNIGIRY Seamless Handbags Wonderland Alice Women Top Leather Handle Zip Closure Women Handbags Bag Alice In Zip Top Closure Wonderland Leather PU Seamless Shoulder Handle BENNIGIRY throw readFileErr;
  console.logWomen Rieker Women Women Z6814 Rieker Z6814 Women Rieker Z6814 Rieker Women Rieker Z6814 Rieker Z6814 x4AfZ(data);
  fs.unlink('/file.md', Handbags In Seamless Top Zip Closure Alice Handle Wonderland BENNIGIRY Leather Shoulder Bag Women PU (Women Art Art Art Art Women Women Women Art Art Women Women FZnCqwYaxunlinkErr) => {
    if (unlinkErr)Frye 12r 12r Engineer Women Women 12r Frye Women Frye Engineer Engineer CUU6qw5 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