Uses concurrency to improve performance
before: Time was #92374 milliseconds
after:  Time is  #51313 millisecond, on 7 threads (best result on my i7 cpu)
this is almost half the execution time, due to overhead of sorting the results.