Do not forget that this solution is inherently mono-threaded and does not benefits from a proper concurrency model like node.js for example (which is also mono-threaded by "design" but provide non blocking IO).
So for big files with multiple downloaders, it can be sometimes not as good as you want it to be.
So for big files with multiple downloaders, it can be sometimes not as good as you want it to be.