Added asynchronous version

This version uses threads and semaphores to run other processes
asynchronously