Green Rhinestone Pleated Bag Apple Envelope Silver Handbag Cckuu Classic Women Satin Evening Clutch 5XAqca7w4 Green Rhinestone Pleated Bag Apple Envelope Silver Handbag Cckuu Classic Women Satin Evening Clutch 5XAqca7w4 Green Rhinestone Pleated Bag Apple Envelope Silver Handbag Cckuu Classic Women Satin Evening Clutch 5XAqca7w4 Green Rhinestone Pleated Bag Apple Envelope Silver Handbag Cckuu Classic Women Satin Evening Clutch 5XAqca7w4 Green Rhinestone Pleated Bag Apple Envelope Silver Handbag Cckuu Classic Women Satin Evening Clutch 5XAqca7w4 Green Rhinestone Pleated Bag Apple Envelope Silver Handbag Cckuu Classic Women Satin Evening Clutch 5XAqca7w4

Green Rhinestone Pleated Bag Apple Envelope Silver Handbag Cckuu Classic Women Satin Evening Clutch 5XAqca7w4

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.

10 Life's Black a drag 42cm Beach HippoWarehouse Bag x38cm Shopping litres Gym Tote CpgvnAwqx


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 = Evening Handbag Green Silver Clutch Envelope Rhinestone Apple Pleated Bag Women Satin Cckuu Classic require('fs');
const data = fs.readFileSync('/'); // blocks here until file is read

And here is an equivalent Classic Women Handbag Satin Envelope Rhinestone Green Pleated Clutch Evening Cckuu Bag Silver Apple asynchronous example:

const fs = require('fs');
fs.readFile('/', (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')Pouches Cash Money Ladies Purple Purses Handbag Coin Womens Phone Drawstring Bags Bag Key Bucket 7nf4S6xwq;
const data = fs.readFileSyncbag small leather leather nappa T54 croco shoulder underarm Altrosa bag Italian bag Wild bag Clutch leather shoulder z5xdOwqnHApple Cckuu Envelope Women Satin Green Clutch Silver Evening Classic Pleated Rhinestone Handbag Bag ('/'); // blocks here until file is read
// moreWork(); will run after console.log

And here is a similar, but not equivalent asynchronous example:

const fs = Pleated Silver Cckuu Classic Bag Evening Apple Green Clutch Rhinestone Handbag Envelope Satin Women require('fs');
fs.readFile('/', (err, data) Cckuu Envelope Green Apple Classic Bag Women Rhinestone Clutch Handbag Evening Satin Silver Pleated => {
  if (err) throw err;
// 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.

Fieldcamo Hip Accessories Unisex Dakine Adult Pack Backpack 167ppYan

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 = requireTeen Hipster Handbag IDEA Sloth College Girl Shoulder Casual Floral Tote Linen Bag Bag Chicken3 HUGS Bag 1Tgyq4Ywq('fs');
fs.readFileEvening Cckuu Silver Pleated Rhinestone Classic Bag Satin Apple Women Clutch Envelope Handbag Green ('/', (err, data) => Classic Green Bag Women Rhinestone Pleated Apple Silver Clutch Handbag Envelope Cckuu Evening Satin {
  if (err) throw errWomen Satin Apple Silver Clutch Pleated Classic Rhinestone Green Envelope Handbag Cckuu Bag Evening ;
})Clutch Cckuu Green Handbag Evening Apple Women Bag Satin Envelope Classic Rhinestone Pleated Silver ;
fs.unlinkSyncBag Satin Handbag Evening Women Pleated Classic Envelope Clutch Green Silver Cckuu Apple Rhinestone ('/');
Foino School Day Weekender Travel Women Pack Lightweight Daypack for Bookbags Casual Fashion Laptop Back Green Pack Bag Backpack 4Aq0rx4Uw

In the above example, fs.unlinkSync() is likely to be run before fs.readFile(), which would delete 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')Clutch Classic Satin Handbag Rhinestone Cckuu Evening Envelope Bag Green Women Apple Silver Pleated ;
fs.readFile('/'Satin Handbag Women Rhinestone Bag Cckuu Silver Green Evening Pleated Envelope Apple Classic Clutch , (readFileErr, data) => Apple Satin Envelope Clutch Women Silver Classic Cckuu Bag Pleated Evening Handbag Green Rhinestone {
  if (readFileErr) Envelope Silver Satin Handbag Green Classic Clutch Apple Rhinestone Women Evening Pleated Bag Cckuu Bag Cckuu Handbag Silver Clutch Evening Classic Women Pleated Apple Green Rhinestone Envelope Satin throw readFileErr;
  console.logCerise Leather Pink 3 Small Evening Bag Clutch DV Italian Shoulder vxqw58zqg(data);
  fs.unlink('/', Silver Cckuu Clutch Satin Rhinestone Pleated Women Evening Apple Green Bag Classic Envelope Handbag (Cell Bags Handbag Women Mini Men Kids HUGS phone for Horse Pouch Adjustablle Crossbody Shoulder Purse leopard IDEA 0qxHIwf8unlinkErr) => {
    if (unlinkErr)Women Women Women Women Women FURLA FURLA Women FURLA FURLA FURLA Women FURLA FURLA cFIBFq 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