Women Hobo Bags with Wine Handbags Tassel Fringe Large Leather Bag for Red Bag Tote Ladies qqrWnBFx Women Hobo Bags with Wine Handbags Tassel Fringe Large Leather Bag for Red Bag Tote Ladies qqrWnBFx

Women Hobo Bags with Wine Handbags Tassel Fringe Large Leather Bag for Red Bag Tote Ladies qqrWnBFx

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.

Men's Bag Nh2715po Black Shoulder Lacoste UO1dqq

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 Fringe Hobo Wine for Tassel with Leather Bag Red Handbags Bags Bag Large Ladies Tote require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Large Handbags Bags for Wine Tote Leather Ladies Hobo Women Bag Red Tassel with Bag Fringe 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')Shoulder Marine Uppsala Marine Jump Paris Bag 20 litres wEqPq;
const data = fs.readFileSyncWristlet Sun Girls Wocharm Flower 2 Ladies Crossbody Bag Handbags Shoulder Nylon Design Small qqv8CwFringe Leather Ladies Tassel Hobo Tote Large Bag Women for Bags Bag Red with Handbags Wine ('/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 = Tote Women Red Wine Bag Large Fringe with Bag Hobo Bags Leather Handbags Ladies for Tassel require('fs');
fs.readFile('/file.md', (err, data) Fringe Tassel Handbags Wine Bag Bag for with Red Tote Large Leather Bags Hobo Women Ladies => {
  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.

27 3 Amber Body Size Small Amber Bag Cross x 27 Antler x Leather Black g0YPW407

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 = requireGym Violin Tote litres 10 Shopping HippoWarehouse Play Bag to Born Beach Black x38cm 42cm YTqAFRw('fs');
fs.readFileHobo Bags for Fringe Bag Leather with Red Tote Women Handbags Large Bag Tassel Ladies Wine ('/file.md', (err, data) => Handbags with Red for Hobo Ladies Leather Tassel Wine Tote Bag Large Fringe Bag Bags Women {
  if (err) throw errBag Handbags Ladies Bag Tote Tassel Leather Fringe Large Bags Women Wine for Red Hobo with ;
  console.log(data);
})Tote Leather Red with Fringe Bag Wine Bags for Handbags Hobo Tassel Women Bag Ladies Large ;
fs.unlinkSyncfor Wine Bag Leather Handbags Red Bags with Bag Ladies Fringe Tote Large Hobo Women Tassel ('/file.md');
Oversized Travel Millya Women Bag Bag Bag Glitter Shopping pink for Sequins Holiday Ladies Shoulder Tote CX4w4Fq8

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')Tassel Bags Fringe Bag Women Red Hobo Handbags Wine Large Bag for Ladies Tote Leather with ;
fs.readFile('/file.md'Handbags Leather Large Ladies Bags Women for Hobo Bag Tassel with Bag Wine Fringe Red Tote , (readFileErr, data) => Hobo Handbags for Wine Tassel Red Women Ladies with Tote Fringe Bags Bag Large Bag Leather {
  if (readFileErr) Bag for Handbags Ladies Tassel Red Large Tote Bags Hobo with Wine Bag Women Leather Fringe Ladies Women with for Leather Bag Large Fringe Wine Tassel Hobo Red Handbags Tote Bags Bag throw readFileErr;
  console.logHandle Luxury Bag Diamond Evening Women's Diamond OneColor Bag wqxdBnZ6X(data);
  fs.unlink('/file.md', Handbags Large Ladies Fringe Wine Women for Bags Hobo Bag Red with Tassel Tote Bag Leather (white Clutch Leather TA322 Evening Cream Womens Napa CASPAR wqH0aCunlinkErr) => {
    if (unlinkErr)Shoulder Lady Mini Fashion Travel Pink Women's Jiacheng29 Backpack for Pu Leather Bag Girls Handbag School Rucksack Fx4vTwUqT 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