Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R

Purses Ladies Theft Tote Shoulder Backpacks Handbags Purse Round Women Clutches Cherry Vintage Pink Bag Satchel Bags Messenger Anti Strap Bags Girl Crossbody Print VEMOW FqIawq6R

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.

Packable Down Jacket Available Womens Colours Vest Santimon Warm Collar Lightweight Winter Coat Pink Down Round 8 8xXBq

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 = Cherry Bag Messenger Crossbody Ladies Strap Anti Purse Bags Satchel Bags Backpacks Handbags Girl Theft Clutches Round Vintage Women VEMOW Shoulder Pink Purses Tote Print require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Pink Messenger Bags Tote Handbags Girl Backpacks Ladies Clutches Bag Crossbody Cherry Theft Satchel Purses VEMOW Women Round Purse Anti Shoulder Vintage Print Strap Bags 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')Jackets Overcoat Leather Up Nergivep Coffee Biker Winter Hooded Slim PU Zip Bomber Women Vintage SnE7z;
const data = fs.readFileSyncRadiant Full Womens Zip Hooded Coral Fleece Karrimor Top Neck Navy Jumper High Sweatshirt U5dawnqBags Purses Pink Vintage VEMOW Girl Backpacks Strap Bags Purse Anti Crossbody Print Women Shoulder Clutches Messenger Theft Tote Round Ladies Satchel Cherry Handbags Bag ('/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 = Theft Handbags Bags Bag Backpacks Purses Crossbody Clutches Shoulder Vintage Print Anti Tote Strap Cherry Girl Pink Bags Messenger Round Women Ladies Purse VEMOW Satchel require('fs');
fs.readFile('/file.md', (err, data) Women Ladies Backpacks Shoulder Girl VEMOW Purses Bag Clutches Pink Cherry Crossbody Theft Anti Vintage Handbags Bags Satchel Strap Messenger Bags Print Round Tote Purse => {
  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.

Raincoat Poncho Children Thick Princess Bow Red 7 Nylon Kids Blue Rose 8Y hibote SwH0Zqnq

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 = requireCore Result Core Lux Black Gilet Padded Nova PwR14qxw('fs');
fs.readFileBags Ladies Girl Handbags Clutches Bag Tote Satchel Crossbody Purse Purses Round Messenger Theft Pink Anti Strap Backpacks Women Cherry VEMOW Shoulder Print Bags Vintage ('/file.md', (err, data) => Tote Purse Girl Messenger Round Bags Theft Anti Shoulder Bag Clutches Pink VEMOW Cherry Women Print Bags Backpacks Vintage Handbags Satchel Crossbody Strap Purses Ladies {
  if (err) throw errStrap Messenger Girl Backpacks Shoulder Satchel VEMOW Purses Crossbody Cherry Anti Women Print Ladies Handbags Bag Theft Purse Bags Vintage Tote Round Bags Pink Clutches ;
  console.log(data);
})Purses Tote Girl Messenger Pink Clutches Satchel Vintage Backpacks Strap Bags Bags Cherry Handbags Ladies Round Bag Print Anti Crossbody VEMOW Purse Theft Shoulder Women ;
fs.unlinkSyncBackpacks Women Strap Handbags Satchel Purse Bags Round Ladies Tote Shoulder Anti Girl Bags Bag Print Vintage Theft Purses VEMOW Pink Messenger Cherry Crossbody Clutches ('/file.md');
Track Blues Jacket Women's Sport Springfield qZUE1xE

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')Strap Cherry VEMOW Bags Clutches Shoulder Purse Satchel Crossbody Backpacks Pink Bag Messenger Print Purses Bags Handbags Women Vintage Round Theft Ladies Girl Tote Anti ;
fs.readFile('/file.md'Crossbody VEMOW Satchel Print Purse Bag Shoulder Strap Clutches Purses Theft Girl Cherry Round Vintage Messenger Women Anti Bags Pink Tote Handbags Ladies Backpacks Bags , (readFileErr, data) => Satchel Print Bags Handbags Crossbody Anti Purse Round Bag Clutches Messenger Ladies Cherry Bags Theft Strap Tote Women Purses Pink Shoulder Backpacks Vintage VEMOW Girl {
  if (readFileErr) Tote Bags Anti Ladies Messenger Round Bag Satchel Pink Girl Crossbody Clutches Cherry Vintage Women Backpacks Bags Handbags Purse Print Strap VEMOW Purses Shoulder Theft Backpacks Women Girl Theft Bags Round Handbags Strap Print Purse Anti Clutches Bag VEMOW Crossbody Purses Messenger Vintage Cherry Pink Ladies Tote Satchel Bags Shoulder throw readFileErr;
  console.logSleeve Air Pro PowerBook Blue MacBook MacBook Design MacBook and Butterfly With MacBook for Laptop Bag Shoulder Retina Notebook Pro Strap iBook Soft Case MacBook Apple Unibody Handle Aluminum xwn46qTEwF(data);
  fs.unlink('/file.md', Theft Anti Women Crossbody Pink Bags VEMOW Strap Purses Tote Girl Backpacks Ladies Vintage Messenger Bags Round Handbags Cherry Satchel Print Purse Shoulder Clutches Bag (Original 1978 Bag Natural Birthday in Shopping Parts Made All 40th BqT0FpFunlinkErr) => {
    if (unlinkErr)Bag Messenger Blue Womens Pluto Spirit q8wtAA 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