我目前正在编写一个 bittorrent 客户端。我正在进入我的程序阶段,我需要开始考虑多个线程是否会改进我的程序以及我需要多少线程。
我假设我会分配一个线程来处理跟踪器,因为程序可能一次与其中几个(大约 1-5 个)联系,但只需要在跟踪器分配的时间间隔内联系它们(大约 20分钟),因此不会对程序非常密集。
该程序将定期与众多同行联系,以从他们那里下载文件。以下内容来自Bittorrent 规范 Wiki:
实现者注意:即使30个peer也足够了,官方客户端版本3实际上只有在peer少于30个时才主动建立新连接,如果达到55个则拒绝连接。这个值对性能很重要。当一个新片段完成下载时,需要将 HAVE 消息(见下文)发送给大多数活跃的对等点。结果,广播流量的成本与对等点的数量成正比增长。超过 25 岁的新同行极不可能提高下载速度。强烈建议 UI 设计人员将其变得晦涩难懂且难以更改,因为这样做非常有用。
这表明我应该与大约 30 个同行联系。什么是用于我的 Bittorrent 客户端的好的线程模型?显然我不想为每个对等点和每个跟踪器分配一个线程,但我可能需要的不仅仅是主线程。你有什么建议?