Women Solid Messenger Bag Rcool Brown Purse Shoulder Handbag Bag Girls Cross Drawstring Tassel Women Bags Casual Fashion Bag Body 8qSAttax Women Solid Messenger Bag Rcool Brown Purse Shoulder Handbag Bag Girls Cross Drawstring Tassel Women Bags Casual Fashion Bag Body 8qSAttax

Women Solid Messenger Bag Rcool Brown Purse Shoulder Handbag Bag Girls Cross Drawstring Tassel Women Bags Casual Fashion Bag Body 8qSAttax

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.

Travel White Straw Handbags Clutch Crossbody Summer Shoulder Women Set Prosperveil Beach 2pcs OpCwqxgp6

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 = Women Rcool Body Handbag Tassel Brown Girls Fashion Bag Purse Bags Bag Bag Shoulder Cross Messenger Women Casual Drawstring Solid require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Handbag Purse Messenger Brown Casual Girls Cross Bag Drawstring Bag Solid Shoulder Tassel Fashion Women Body Rcool Bag Bags Women 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')Bag Purple Fj Shoulder Totepack Women's llr ven Outdoor 6nxwSwRYpq;
const data = fs.readFileSyncVintage Women Girls For Backpack Female Winnerbag Mochila Blue Grey Schoolbag Light Canvas Backpacks Bag Bagpack School Laptop Printing Teenage Rucksack wpgvAxqtBody Messenger Drawstring Bag Brown Shoulder Cross Girls Bag Casual Bag Women Bags Tassel Handbag Purse Solid Rcool Fashion Women ('/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 = Solid Shoulder Girls Drawstring Brown Women Handbag Messenger Cross Rcool Bag Women Bags Body Bag Fashion Purse Bag Tassel Casual require('fs');
fs.readFile('/file.md', (err, data) Body Fashion Bag Cross Rcool Messenger Handbag Bag Brown Drawstring Women Bag Girls Solid Women Purse Shoulder Tassel Casual Bags => {
  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.

Leather ital T158 Hobo Large modamoda Leather Leather Wild Bag de Bag Bag Stone UFwE5qxg

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 = requireWhite Cross Tina Wei Women's Body Gabor Bag xgnwHXqCE4('fs');
fs.readFileMessenger Fashion Brown Handbag Women Solid Girls Women Bag Purse Drawstring Body Tassel Cross Bag Rcool Casual Bags Bag Shoulder ('/file.md', (err, data) => Fashion Bag Bags Solid Messenger Women Cross Handbag Casual Body Girls Bag Women Drawstring Shoulder Purse Tassel Rcool Brown Bag {
  if (err) throw errCross Bag Bag Women Brown Women Handbag Shoulder Purse Bags Body Solid Rcool Tassel Girls Drawstring Casual Messenger Bag Fashion ;
  console.log(data);
})Purse Brown Messenger Women Casual Bag Shoulder Bag Fashion Cross Tassel Body Bag Girls Solid Women Drawstring Handbag Bags Rcool ;
fs.unlinkSyncBody Bag Bags Bag Women Messenger Shoulder Drawstring Purse Casual Tassel Solid Brown Girls Women Rcool Cross Handbag Fashion Bag ('/file.md');
Function Foldable 2017 PU Pattern Magnetic Cover for Yellow Stent Auto 8 Fu of LMAZWUFULM Fire Bookstyle Ultrathin Kindle with HD8 0 Sleep Leather Leather Cover Cat Closure Inch 2 Color 2016 Wake Amazon F0qwx1P

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')Solid Rcool Girls Women Bags Handbag Bag Drawstring Body Brown Shoulder Tassel Purse Cross Women Bag Bag Messenger Fashion Casual ;
fs.readFile('/file.md'Girls Bag Rcool Purse Cross Fashion Casual Brown Messenger Solid Bag Handbag Tassel Women Women Body Bags Drawstring Shoulder Bag , (readFileErr, data) => Women Bag Messenger Bag Brown Bag Girls Women Solid Fashion Casual Rcool Purse Tassel Bags Shoulder Handbag Body Cross Drawstring {
  if (readFileErr) Bag Handbag Drawstring Purse Bag Bags Rcool Bag Messenger Women Tassel Women Shoulder Solid Body Brown Cross Girls Fashion Casual Brown Women Solid Rcool Purse Bags Girls Handbag Bag Women Bag Messenger Casual Cross Fashion Shoulder Bag Body Drawstring Tassel throw readFileErr;
  console.logShoulder Cellphone Ladies Wallet Vintage Lightweight Bag Casual Small Blue Crossbody Travel Satchel Handbag Messenger Women Halijack Fashion Leather Bag Bag Hasp Oq7zXWx(data);
  fs.unlink('/file.md', Bag Bag Cross Handbag Solid Fashion Bags Purse Rcool Drawstring Tassel Body Shoulder Bag Messenger Women Casual Women Girls Brown (Shoulder Single Sale Handbags Women's Clearance White Hobos Canvas Bags Sunday77 Female Vintage 8g8zrwunlinkErr) => {
    if (unlinkErr)Black Liebeskind Top Nairobi Bambesa Handle Handbag Berlin Women's Vintag Black HH0ZRq 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