https://medium.com/@jamil.ahmad7720/mastering-multithreading-in-go-lang-a-deep-dive-into-the-producer-consumer-problem-656e3e11abcb