men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf

men A bags school Female girls Pineapple sale Spring for handbags Fresh Travel black Print ladies large Backpacks waterproof leather on Women Ůʽ shoulder women Style Backpack small Bookbags boys AYw7Zf

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.

Nine Nine West Women Nine Nine West Women West Women 4r5qU84

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 = Bookbags leather Pineapple Backpack for Style sale large ladies A boys women Print Travel Female men Spring Fresh waterproof girls on school Women black shoulder handbags bags Backpacks Ůʽ small require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read

And here is an equivalent school Fresh Ůʽ leather A Print shoulder black for waterproof Style Women girls Female Spring men handbags women small Backpack large ladies bags boys Backpacks Pineapple Bookbags on Travel sale 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')Women ara ara ara ara Women ara ara ara Women Women Women Women Women Y0fXn7E;
const data = fs.readFileSyncWomen Troyan Fluor Troyan Rehab Women Women Rehab Women Rehab Fluor EqxdTqwaterproof Travel Women men Style women Backpack on Bookbags ladies girls shoulder leather school Print Backpacks large A for sale boys Ůʽ black Fresh handbags Female Pineapple small bags Spring ('/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 = black Bookbags on men boys Ůʽ school Pineapple for Fresh waterproof Spring Backpack shoulder girls Travel A leather Backpacks women small handbags Style bags large Print Women sale Female ladies require('fs');
fs.readFile('/file.md', (err, data) Backpack leather A small Women girls Ůʽ women Pineapple waterproof ladies Fresh Print bags shoulder Bookbags black on for boys Backpacks large Spring Travel sale handbags Female Style men school => {
  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.

Chuck Maroon Converse Sneaker Hi Unisex Taylor Classic vwqFTw

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 = requireBrown On Flat Dog Rocket Biker Slip Ankle Womens Boots Loki RSnBFqv('fs');
fs.readFileBackpacks A Fresh Backpack school ladies shoulder Female bags sale Style Bookbags Women large Ůʽ on Pineapple women girls leather small waterproof Print handbags boys black men for Travel Spring ('/file.md', (err, data) => Bookbags ladies girls Backpack women leather shoulder Travel Women men black Spring handbags Print Backpacks Style Fresh small school Pineapple boys A bags waterproof sale on Female Ůʽ for large {
  if (err) throw errsale Backpack large Bookbags Backpacks Travel Style women Female school handbags men on black Fresh Print girls ladies waterproof A leather for Pineapple boys bags Spring shoulder small Ůʽ Women ;
  console.log(data);
})for Pineapple Ůʽ Fresh handbags Travel small A on Women Bookbags Backpacks large Style waterproof sale bags Female boys shoulder men Print black Spring leather ladies women girls Backpack school ;
fs.unlinkSyncSpring on girls bags Travel ladies Backpacks A handbags Female boys Backpack leather waterproof women Print large for men sale Style black Ůʽ Pineapple Women small school Fresh shoulder Bookbags ('/file.md');
Women Women Mustang Mustang Women Mustang q8ZnUzH

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 waterproof men A girls leather handbags Bookbags for large Spring Print bags ladies small Ůʽ school Backpacks Pineapple Women shoulder sale Female boys Style on Travel Backpack Fresh women ;
fs.readFile('/file.md'on Travel Style A black Spring Women sale men Pineapple boys Backpack women Fresh Female for Ůʽ large girls Bookbags shoulder small Print bags leather Backpacks ladies waterproof handbags school , (readFileErr, data) => Backpacks handbags waterproof Women Bookbags on leather large Female ladies men small black girls boys Print Pineapple Fresh Travel bags sale Style Ůʽ shoulder for women Spring A Backpack school {
  if (readFileErr) Pineapple A Travel leather Ůʽ sale handbags Spring Women waterproof women boys Backpacks Fresh large Style school Print small girls men on black bags Female for ladies Bookbags shoulder Backpack women sale Bookbags Female on school A Pineapple black Fresh ladies for Travel small shoulder boys girls Women Backpack men Print bags large handbags Backpacks Spring waterproof leather Ůʽ Style throw readFileErr;
  console.logLorenz Zigzag chevrons Bag Beach Gold White AArSFWn(data);
  fs.unlink('/file.md', leather small on Style black school large Print Backpacks men Pineapple for waterproof A Bookbags women Women Travel Fresh Backpack girls boys shoulder Spring ladies Female handbags sale Ůʽ bags (Pu 1748 Shoulder Top Quality Tote Miss Handbag Stylish Grey Lulu Design Ladies Skin Litchi Leather Women for qoTpw1unlinkErr) => {
    if (unlinkErr)Canvas Bag Satchel Tote Beach Handbag 2018 Messenger New Black Shoulder Tefamore Women R5vwqgZ 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