我有一个关于多线程下载的问题,因为你知道使用多个线程下载可以提高应用程序的性能,但是有一些措施要尊重:比如线程数,可用带宽等等,但我不是真的理解,为什么应用程序的性能可能因使用多个线程而降级,或者服务器的带宽,质量如何影响多线程应用程序的性能? ,monothread下载比多线程更快的情况是什么? 谢谢你的回复。
答案 0 :(得分:9)
我假设您指的是下载管理器。
首先,我怀疑下载管理器真正提供了多少“性能”好处。但更重要的是,由于多线程,他们提供的任何好处都是 不 。下载的性能限制是连接的带宽。这就是为什么我对这些好处持怀疑态度:
下载管理器的真正好处在于有效地自动重启下载(如果可能的话,不能从头开始重新启动)。
让我们首先消除一个神话:多线程 不会 加快速度。如果例程需要运行X个时钟周期:它将需要X个时钟周期;无论是1线程还是多线程。
多线程的作用:它允许任务同时运行 (同时)。
同时做不同事情的能力意味着:
嗯,几乎总是在CPU不是瓶颈的情况下。在下载的情况下:如前所述,瓶颈是连接的两个端点之间的带宽。许多线程实际上意味着你必须做更多的工作(管理和协调不同的线程)。
最有效的下载方法是2个线程:一个用于UI,另一个用于下载,因此任何暂停/ dealys都不会停止用户界面。
然而,更一般地说,即使你有CPU密集型工作理论上可以从多个线程同时执行不同工作中受益,但实施中很容易出错 实际上会降低应用程序的速度 强>
答案 1 :(得分:0)
首先,多线程下载的作用是创建多个线程,这些线程从不同的起始位置下载文件,从而尝试利用Internet连接的最大功能。 (这将在多核处理器的情况下快速下载,这将在下面说明)。
我们可能会觉得线程并行运行,但是实际上,它们应该轮流运行。例如,线程t1运行0.25秒,然后线程t2运行0.241秒,然后t1,..,t2,t1。因此,他们共享CPU突发次数。
我希望这会有所帮助! :-)