We are going to implement a simple downloader.
In this applcation, we can download multiple resources at the same time. But with a limitation.
The limitation is that we can download at most N files simultaneously. For example, if N is equal to 3, we can download 3 files at the same time. Then, when one of the threads has completed downloading a file, another thread will start its process.