Non-blocking I/O (input/output) means is that when a web application receives input it can process that input and produce output without blocking other inputs and outputs from being handled concurrently. For example, inputs and outputs (I/O) in Node.js are non-blocking. This is basically another way of saying that Node.js is event-based. Let’s look at an example. Node.js receives input A, processes it, and fires off a function. While it’s waiting on the results, input B shows up. Node.js goes ahead and processes input B while it waits on the results for input A. If the results from input A are ready before input B has finished processing, the results from input A will wait in line until Node.js is ready for them. Node.js finishes processing input B, fires off a function for input B, then grabs the results from input A and sends them off as output A back to the source that sent in input A. It is this non-blocking I/O architecture that allows Node.js to handle a very large number of inputs and outputs very efficiently.