我认为您可能会以错误的方式考虑问题。拍摄连接速度快照仅表示其在该瞬间的吞吐量。当您运行消耗带宽的测试时,他们很可能正在运行另一个应用程序,然后您的测量值一文不值。
相反,我认为您应该根据线程是增加还是减少它们的吞吐量来不断添加或删除线程。我建议这样的事情(仅限伪代码):
while(true) { double speedBeforeAdding = getCurrentSpeed(); addThread(); // Wait for speed to stabilise sleep(20 seconds); double speedAfterAdding = getCurrentSpeed(); if(speedAfterAdding < speedBeforeAdding) { // Undo the addition of the new thread removeThread(); // Wait for speed to stabilise sleep(20 seconds); if(getNumberOfThreads() > 1) { double speedBeforeRemoving = getCurrentSpeed(); // Remove a thread because maybe there's too many removeThread(); // Wait for speed to stabilise sleep(20 seconds); double speedAfterRemoving = getCurrentSpeed(); if(speedAfterRemoving < speedBeforeRemoving) { // Add the thread back addThread(); // Wait for speed to stabilise sleep(20 seconds); } } }}您可以根据自己的需要调整睡眠时间。我假设这里
getCurrentSpeed()返回 所有
下载线程的吞吐量,并且您能够在应用程序执行期间动态地打开和关闭线程。



