With most programs functions are blocking in that they will complete their task before returning.
Generally this type of programming is easy to manage as you have only one task active at any time.
This style of programming is known as synchronous, but the problem with it is that it can make applications very slow as they have to continually wait.
This is very noticeable when the functions are working with slow media like disks and networks.
Non Blocking functions use asynchronous style of programming were functions are started and return immediately so that the application can process the next task.
The function that was started continues in the background and notifies the main application when it has completed its task.
Here’s an diagram illustrating the program flow of each: