Lets first understand what are the four kind of calls before we understand the differences.

Synchronous - Thread will complete the action, either by success or failure. ie the work is done in the thread that calls the function and the method does not return until it is finished. 

Blocking - Thread will wait on action untill success or failure . Failure is commonly a timeout.Examples would be 

Non-blocking - Thread will not wait to complete the action. Non blocking io is a very good example of non blocking calls. Event loop in nodejs is non blocking in nature..(non blocking sockets using epoll). Note that there is no call back function like asynchronous calls hence polling is required.

Asynchronous - Another thread/threadpool/process will complete the action . The action may simply be added to queue which is being processed .In a nutshell there is delegation. ie asynchronous methods return immediately because another thread does the work and raises a flag or fires an event  or executes a call back function when the work is done. Asynchnous calls are very common , for example

Difference between non blocking and asynchronous

In non blocking call there is no task delegation. In asychronous call there is task delegation to thread/threadpool/process/queue and call back function may be provided which will be called after task is executed.

Similarity between non blocking and asynchronous

Both non blocking and asynchnous methods will return immediately.