TODO use uvw, a wrapper for libuv which is a library for asynchronous I/O or boost::asio seeding support implement a piece selection strategy multi-threading for downloading pieces: worker queue for pieces to download