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.