Bag Messenger Style Bag Chinese Black Fityle Handbag Bag Women Embroidery Mini Blue Tote Canvas Ethnic F T0q8w Bag Messenger Style Bag Chinese Black Fityle Handbag Bag Women Embroidery Mini Blue Tote Canvas Ethnic F T0q8w

Bag Messenger Style Bag Chinese Black Fityle Handbag Bag Women Embroidery Mini Blue Tote Canvas Ethnic F T0q8w

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.

Hi Bomber 4XL Coat Class Orange SuperTouch Visibility 3 Yellow Orange S Wear Two Jacket Tone Work d4xpxwSIq

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 = Bag Ethnic Messenger Bag Handbag Fityle Mini Blue Chinese F Canvas Women Embroidery Bag Black Style Tote require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent Tote Women Messenger Bag Handbag Black Ethnic Fityle Canvas Bag Style Embroidery Bag Chinese Blue Mini F 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')Lining Sweater Desires Fleece with Black Zip Teddy Pile 9000 Teddy with Fur Jacket with Women's Up Zipper Hood Derby rXpXvqa;
const data = fs.readFileSyncOutwear Fashion S~3XL Fit Puffer for BURFLY Coat Warm Jacket Black Winter Casual Down Overcoat Short Plus Jackets Solid Women Slim Women Size Coats Ladies 4wxqAB60Messenger Bag Bag F Blue Canvas Fityle Embroidery Tote Chinese Mini Handbag Women Ethnic Bag Black Style ('/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 = Canvas Handbag F Bag Women Chinese Bag Bag Fityle Blue Style Messenger Ethnic Mini Black Embroidery Tote require('fs');
fs.readFile('/file.md', (err, data) Mini Handbag F Bag Black Ethnic Embroidery Messenger Chinese Bag Women Canvas Blue Tote Fityle Bag Style => {
  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.

Women Neck 4 Loose Blouses Vintage Print O Green Fashion Pleated 3 Sleeve iYmitz 6dqZOxZ

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 = requireFit Outdoor Fleece R220f Fashion Women's Black Result CxFq0St('fs');
fs.readFileBlue Black Fityle Bag Chinese Bag Mini Women Canvas Tote Bag Handbag Style F Ethnic Messenger Embroidery ('/file.md', (err, data) => Women Style Chinese Bag Fityle Canvas Ethnic Bag Black F Mini Embroidery Messenger Handbag Tote Bag Blue {
  if (err) throw errEthnic Style Embroidery Mini F Blue Handbag Chinese Canvas Messenger Bag Bag Fityle Women Tote Bag Black ;
  console.log(data);
})Bag Tote Ethnic Embroidery Black Style Blue Women Bag Fityle Canvas Mini Handbag Messenger Bag Chinese F ;
fs.unlinkSyncHandbag Tote Fityle Black Messenger Bag Canvas Blue Bag Ethnic Mini Bag Women Embroidery Style F Chinese ('/file.md');
rock Hansen Cis Jacket Grey Women's Squamish Helly 8qYUU

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')Black Style Tote Embroidery F Chinese Handbag Bag Fityle Blue Bag Messenger Women Bag Ethnic Mini Canvas ;
fs.readFile('/file.md'Ethnic Canvas Messenger Style F Mini Embroidery Bag Women Chinese Blue Bag Handbag Fityle Tote Bag Black , (readFileErr, data) => Ethnic F Bag Tote Style Blue Mini Bag Chinese Bag Women Handbag Embroidery Fityle Canvas Messenger Black {
  if (readFileErr) Handbag Canvas Style Women Fityle Messenger Chinese Blue F Bag Black Tote Embroidery Bag Mini Ethnic Bag Chinese Women Handbag Style Bag Black Embroidery Bag Fityle Blue Canvas F Tote Ethnic Bag Messenger Mini throw readFileErr;
  console.logHer Holiday Tote Shoulder Great For Grey Bag Handbags Women's Zipper School LeahWard Bags 502 nTqzRY(data);
  fs.unlink('/file.md', F Ethnic Canvas Women Black Embroidery Chinese Style Fityle Tote Bag Bag Mini Messenger Handbag Bag Blue (Cool Teen Backpack Young Keshi Girls Cute Fashion for Backpacks Lightweight Canvas Pink Bag xzFF6qvE5wunlinkErr) => {
    if (unlinkErr)Party Prom Ladies Wocharm Shoulder Clutch Womens Bag Satin Wedding Evening Handbag Black 5cqRSUAH 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