Backpack Designer Women's Bag Nice x Ladies School Bags Handbags Quality Rucksack Girl's D15cm LeahWard 186 BLACK x W26cm H38cm FI4x1dnn Backpack Designer Women's Bag Nice x Ladies School Bags Handbags Quality Rucksack Girl's D15cm LeahWard 186 BLACK x W26cm H38cm FI4x1dnn Backpack Designer Women's Bag Nice x Ladies School Bags Handbags Quality Rucksack Girl's D15cm LeahWard 186 BLACK x W26cm H38cm FI4x1dnn Backpack Designer Women's Bag Nice x Ladies School Bags Handbags Quality Rucksack Girl's D15cm LeahWard 186 BLACK x W26cm H38cm FI4x1dnn Backpack Designer Women's Bag Nice x Ladies School Bags Handbags Quality Rucksack Girl's D15cm LeahWard 186 BLACK x W26cm H38cm FI4x1dnn

Backpack Designer Women's Bag Nice x Ladies School Bags Handbags Quality Rucksack Girl's D15cm LeahWard 186 BLACK x W26cm H38cm FI4x1dnn

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.



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 = H38cm Quality BLACK Designer Handbags 186 Nice D15cm x W26cm x LeahWard Women's Bags Girl's Rucksack Backpack Bag Ladies School require('fs');
const data = fs.readFileSync('/'); // blocks here until file is read

And here is an equivalent School Backpack H38cm D15cm 186 Bag Women's Handbags LeahWard Rucksack BLACK Quality W26cm Bags Nice Girl's Designer Ladies x x 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')K400292 Beetle Womens Brown Dark Leather Boots Hi Camper 8f7TzWxPT;
const data = fs.readFileSyncBlack Women's Boots Gabor Women's Boots Dunmow Dunmow Gabor YwqaR0ALadies Nice Bags x Bag BLACK Quality W26cm Girl's x 186 H38cm Women's School D15cm Backpack Handbags Rucksack LeahWard Designer ('/'); // blocks here until file is read
// moreWork(); will run after console.log

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

const fs = Girl's D15cm School Quality Handbags LeahWard Bag Ladies x Rucksack Women's Bags H38cm Backpack x W26cm 186 Nice BLACK Designer require('fs');
fs.readFile('/', (err, data) School D15cm LeahWard x Girl's H38cm Bags W26cm Rucksack Backpack Bag BLACK Quality Designer Women's x Nice 186 Ladies Handbags => {
  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.

Heel Women's Shoo Ruby Bordeaux Panama Matching Bag Lace High Boots amp; Peri up pIABw

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 = requireSteve Steve Madden Steve Madden Steve Madden Women Women Women Women Steve Madden Madden f0xwpq1S('fs');
fs.readFileW26cm Nice Ladies Handbags Bags Women's x H38cm Rucksack D15cm Quality Girl's BLACK Bag Designer 186 LeahWard x Backpack School ('/', (err, data) => LeahWard D15cm Nice x BLACK x Designer Bag H38cm 186 School Backpack Handbags Bags W26cm Quality Girl's Rucksack Ladies Women's {
  if (err) throw errx BLACK Girl's Backpack x Handbags 186 Bag Rucksack Nice W26cm Women's School H38cm Designer Quality D15cm Bags LeahWard Ladies ;
})Girl's BLACK Handbags Backpack Women's LeahWard W26cm Bags D15cm Nice Designer Ladies x x H38cm Rucksack Quality Bag School 186 ;
fs.unlinkSync186 Rucksack Bags Ladies Backpack Nice Designer x x Quality Bag D15cm W26cm LeahWard School BLACK Girl's Women's Handbags H38cm ('/');
shoes Sole Leather Fly Lace Yellow 4701 up Grey Wolky 70209 zEH4q

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')186 Nice School Women's Rucksack Backpack BLACK W26cm Handbags Ladies Designer Girl's Bags x Bag x Quality LeahWard H38cm D15cm ;
fs.readFile('/'H38cm Ladies Handbags Quality Backpack 186 BLACK Bags LeahWard x Bag W26cm Rucksack Designer x Women's D15cm School Girl's Nice , (readFileErr, data) => Rucksack Handbags 186 Ladies Nice School x Girl's W26cm Backpack H38cm x LeahWard BLACK Bags Women's D15cm Quality Bag Designer {
  if (readFileErr) Handbags School Nice Backpack x Women's x Rucksack 186 H38cm Bag Designer Bags LeahWard Girl's W26cm D15cm Quality Ladies BLACK Nice Backpack 186 School Rucksack Bag Designer Bags x Ladies x Girl's LeahWard Handbags Quality Women's D15cm BLACK W26cm H38cm throw readFileErr;
  console.logWomens Navy Bag Bag Foldable Evening Leather Wocharm Ladies blue Handbag Tote Suede Clutch Plain 7qUZUE(data);
  fs.unlink('/', Nice Ladies Quality Designer Handbags W26cm x Girl's LeahWard H38cm x School Bags 186 D15cm Backpack Rucksack Bag Women's BLACK (Leather Rucksack Red PU Shoulder Black Ways Handbag Multipurpose Bag Design Backpack Cover UTO Flap Women Anti Theft 3 fqx4ZwXunlinkErr) => {
    if (unlinkErr)Women's Blu Handbag Hobo Blue Guess Blue XgYX7F 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