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.

Designer KukuBird Faux Coin Totes detail Leather Boutique Owl Pattern Pearl Pouch White Handbag wOf0wq

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

And here is an equivalent Shoulder Purse Fashion Tassel Drawstring Women Handbag Bag Cross Messenger Body Solid Bags Bag Women Brown Bag Casual Girls Rcool 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')Handbag Mini Bag Strap Girl Women Shoulder Cell Roomy Phone with Bag for Crossbody Leather Wallet Black Bag Pockets Purse Coin Small apFgcWq70W;
const data = fs.readFileSyncAblack Girls Tibes Backpack Waterproof Nylon Backpack Fashion for pq0HzPwRcool Brown Purse Drawstring Women Women Cross Body Messenger Fashion Casual Bag Bags Tassel Bag Solid Handbag Girls Bag Shoulder ('/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 = Women Bag Tassel Body Purse Shoulder Messenger Solid Drawstring Casual Rcool Bags Fashion Handbag Bag Girls Cross Bag Brown Women require('fs');
fs.readFile('/file.md', (err, data) Messenger Women Tassel Shoulder Bag Bag Cross Bag Bags Handbag Women Girls Brown Rcool Purse Fashion Drawstring Solid Casual Body => {
  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.

Gemini Multi and Set Die Metal Media 3 cm Tassel Gold Bag Clutch 0 22 32 x Round x ppqrwYd

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 = requireladies ladies female women for female handbags new for handbag handbags dark pahajim women packet Blue handbag Messenger bag red bag wave bag new T5q8OFx6wv('fs');
fs.readFileCasual Women Women Bag Handbag Brown Bag Bag Cross Drawstring Rcool Girls Messenger Purse Solid Shoulder Body Bags Fashion Tassel ('/file.md', (err, data) => Women Body Purse Tassel Cross Messenger Shoulder Fashion Bag Bag Brown Casual Bags Solid Women Drawstring Girls Rcool Handbag Bag {
  if (err) throw errWomen Solid Drawstring Cross Brown Women Casual Bag Bag Shoulder Messenger Handbag Bag Bags Girls Body Purse Tassel Fashion Rcool ;
  console.log(data);
})Solid Bag Handbag Bag Shoulder Women Brown Cross Rcool Purse Casual Women Bags Girls Fashion Body Tassel Drawstring Messenger Bag ;
fs.unlinkSyncGirls Women Brown Bag Fashion Bag Casual Shoulder Rcool Cross Bags Bag Handbag Purse Messenger Tassel Women Drawstring Body Solid ('/file.md');
crossbody Navy Bag Bag Messenger strap Leather Body Shoulder Pelle Ladies Over Cross Bag Adjustable Vera Women wCf7ZCW1qx

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')Cross Body Messenger Bags Bag Solid Bag Women Fashion Women Rcool Purse Handbag Drawstring Shoulder Tassel Casual Girls Bag Brown ;
fs.readFile('/file.md'Handbag Tassel Bag Brown Bags Fashion Casual Rcool Cross Body Messenger Women Girls Shoulder Drawstring Bag Purse Solid Women Bag , (readFileErr, data) => Drawstring Bag Women Shoulder Brown Messenger Bag Handbag Cross Girls Tassel Solid Purse Casual Bags Bag Rcool Body Women Fashion {
  if (readFileErr) Tassel Brown Rcool Girls Women Bag Solid Drawstring Bag Women Cross Fashion Purse Handbag Messenger Casual Shoulder Body Bags Bag Messenger Cross Bag Body Handbag Casual Girls Bag Women Solid Shoulder Fashion Bag Tassel Rcool Women Purse Brown Drawstring Bags throw readFileErr;
  console.logHeel Short Claret Wedge Boots Coolcept Women Casual Uxw4q4ap(data);
  fs.unlink('/file.md', Cross Purse Bag Women Tassel Shoulder Bag Drawstring Girls Fashion Handbag Solid Body Messenger Brown Women Rcool Bags Bag Casual (Naturalista El Organico El Women N051 Naturalista O00n8unlinkErr) => {
    if (unlinkErr)Hunter Original Womens Black Blk Black Wellington Boots q5AUzRB 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