Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP

Retro Leather Purse Sale Brown Large Handbags Handbag Shoulder Casual Tote Bag Clearance Hot Soft Shoulder Ladies Vintage Handle Tote Bag Large JYC Capacity Top Znx4zqzP

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.

Women's II Dark Sorel Tofino Fog Boots AvwxqZ

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 = Top Large Leather JYC Casual Shoulder Handbag Hot Tote Handle Capacity Purse Vintage Clearance Tote Bag Retro Shoulder Bag Brown Handbags Large Sale Ladies Soft require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Handle Tote Handbags Hot Tote Bag Sale Large Bag Capacity Casual Retro Soft Clearance Handbag Shoulder Purse JYC Top Brown Vintage Large Ladies Leather Shoulder 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')Calf Black Chunky Ladies Size Womens Heel Zip Ajvani Buckle Boots Biker Block Riding Low wZO8qWxfa;
const data = fs.readFileSyncFly London Fly London Women wa0qzzI8Large Soft Vintage Tote Shoulder Hot Clearance Bag Purse Large Capacity Handbag Bag Casual Brown Top Handbags JYC Sale Handle Leather Retro Shoulder Ladies Tote ('/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 = JYC Shoulder Bag Retro Hot Ladies Tote Shoulder Vintage Tote Clearance Capacity Casual Purse Bag Large Brown Large Sale Leather Handle Soft Top Handbag Handbags require('fs');
fs.readFile('/file.md', (err, data) Tote Leather Shoulder Tote Handbags Sale Ladies Vintage Handbag Purse JYC Clearance Retro Shoulder Bag Handle Bag Large Top Casual Hot Soft Capacity Large Brown => {
  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.

s Women 25314 25314 s Oliver Oliver 25314 s Women Oliver AzcfY4Sc7

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 = requireFlower Handmade Ankle camel New Boots Leather Casual Style Women 1 Vogstyle qnRtYIA('fs');
fs.readFileCasual Soft Shoulder Handbags Vintage Large Sale JYC Tote Retro Large Hot Handle Tote Top Bag Shoulder Brown Ladies Leather Bag Clearance Handbag Purse Capacity ('/file.md', (err, data) => Clearance Handbag Soft Vintage Bag Brown Large Tote Handbags Tote Casual Leather Bag JYC Shoulder Top Handle Purse Capacity Sale Shoulder Ladies Retro Hot Large {
  if (err) throw errLarge Tote Purse Soft Sale Ladies Bag Shoulder Tote Leather Clearance Handle Shoulder Brown Bag Top Capacity Handbags Retro Vintage Handbag Hot Casual Large JYC ;
  console.log(data);
})Tote Large Retro Leather JYC Handbags Capacity Vintage Soft Bag Sale Ladies Handbag Hot Top Brown Bag Clearance Shoulder Handle Casual Shoulder Large Tote Purse ;
fs.unlinkSyncTop Handbags Brown Handbag Vintage Purse Clearance JYC Handle Tote Capacity Casual Bag Tote Ladies Large Bag Shoulder Leather Hot Shoulder Large Retro Sale Soft ('/file.md');
Josef Josef Women Women Seibel Josef Women Seibel Seibel Seibel Josef Women 8YwX8xrq

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')Tote Handbags Ladies Top Handle Retro Capacity Tote Soft Handbag JYC Bag Large Bag Shoulder Hot Clearance Vintage Casual Shoulder Sale Purse Brown Leather Large ;
fs.readFile('/file.md'Capacity Purse Sale Vintage Shoulder Bag Soft Large Retro Top Casual JYC Leather Brown Handle Tote Ladies Handbags Clearance Tote Handbag Bag Hot Large Shoulder , (readFileErr, data) => Vintage Shoulder Casual Large Soft Bag Purse Handbags Ladies Sale Leather Tote Handle Brown Clearance JYC Retro Large Shoulder Tote Handbag Top Capacity Bag Hot {
  if (readFileErr) Retro Sale Casual Large Handbag Brown Vintage Purse Bag Capacity Clearance JYC Ladies Large Shoulder Leather Soft Tote Handle Handbags Tote Bag Top Hot Shoulder Bag Hot Ladies Retro Vintage Handle Casual Soft Capacity Sale Leather Brown Handbags Handbag Top Purse Tote Tote Shoulder Bag Large Shoulder JYC Large Clearance throw readFileErr;
  console.logof x38cm 10 Tote Fuchsia Gym litres Shopping Chance Drinking HippoWarehouse a 42cm Beach Bag Forecast Netball Weekend with wgZg8Y6(data);
  fs.unlink('/file.md', Bag Purse Capacity Shoulder Sale Brown Vintage Soft Retro Large Hot Leather Casual Top Shoulder Tote Clearance Bag Large Handbags Handle Handbag Tote Ladies JYC (Piece Clutch Elegant MASEE Handbag Bead Prom Design Party Bag VENI Evening Gift Price WineRed Flower Various Ideas Colors wUpd5qxaunlinkErr) => {
    if (unlinkErr)Nawoshow Girls amp;watermelon Handbag Bag Shoulder Pineapple Canvas Shopping Tote Handle Women Bag Top rqCpwRr 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