https://medium.com/@cbochras/mastering-parallel-and-concurrent-programming-the-power-of-multithreading-and-multiprocessing-71587cbf23ce