首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于多线程下载的缺点

关于多线程下载的缺点
EN

Stack Overflow用户
提问于 2014-06-07 01:31:16
回答 2查看 23.9K关注 0票数 6

我有一个关于多线程下载的问题,你知道使用多线程下载可以提高应用程序的性能,但是有一些指标需要考虑:比如线程的数量,可用的带宽等等,但是我不是很理解,为什么应用程序的性能会因为使用多个线程而降低,或者服务器的带宽和质量会如何影响多线程应用程序的性能?单线程下载比多线程下载快的情况是什么情况?

感谢您的回复。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-07 04:20:57

我猜你指的是下载管理器。

首先,我怀疑下载管理器到底能提供多少“性能”上的好处。但更重要的是,由于多线程,它们提供的任何好处都是而不是。下载的性能约束是连接的带宽。这就是为什么我对它的好处持怀疑态度:

  • 1 Mbps连接将以1 Mbps的速度将文件下载成4个段,这意味着您以256Kbps和4*256Kbps=1Mbps的速度下载每个段。
  • 如果服务器限制每个下载段,您可能会获得一些改进。
  • 如果其中一个段超时,您可能会获得一个小小的好处:其他下载意味着您的连接在超时等待期间不会处于空闲状态。
  • 您还可以通过‘淹没’任何其他尝试使用连接的连接来加快下载速度。(不过,我并不认为这是一个好处。)

下载管理器的真正好处是自动高效地重新启动下载(即,如果可能的话,不会从头开始)。

那么多线程的意义是什么呢?

让我们首先破除一个误区:多线程不会任何东西的速度。如果一个例程需要X个时钟周期才能运行:它将需要X个时钟周期;无论是在一个线程上还是在多个线程上。

多线程的作用:它允许任务并发(同时)运行。

同时做不同事情的能力意味着:

用户interface).

  • Concurrent任务可以在不同的线程上完成,而不会干扰其他需要快速反应的线程(例如
  • 任务也可以更有效地使用更多可用资源(多个CPU)。注意(回答你问题的最后一部分)如果你只有一个CPU,那么你的线程是由操作系统“时间切片”的,所以它不是真正的并发。但时间片非常小,因此之前的好处仍然适用。

什么时候单线程比多线程快?

嗯,在CPU不是瓶颈的情况下,几乎总是如此。在下载的情况下:如前所述,瓶颈是连接的两个端点之间的带宽。许多线程实际上意味着你必须做更多的工作(管理和协调不同的线程)。

最有效的下载方法是两个线程:一个用于UI,另一个用于下载,这样任何暂停/终止都不会停止用户界面。

然而,更普遍的情况是,即使您的CPU密集型工作理论上可以受益于多个线程同时执行不同的工作,但很容易在实现中犯错误,实际上会减慢您的应用程序的

  • 理想情况下,您的多个任务不应共享数据。
  • 当它们必须共享数据时,您需要以某种方式同步工作,以避免上述错误。(有许多技术可供选择,这取决于您的需求,我不会详细介绍here.)
  • However如果您的同步计划不佳,则可能会引入许多问题,从而显著降低应用程序的运行速度。其中包括:通过共享资源进行锁定,使您的多个线程在任何情况下都不能并发运行。任务等待时间比完全阻塞某些tasks.

  • 高锁争用
票数 12
EN

Stack Overflow用户

发布于 2019-11-17 16:13:52

首先,多线程下载所做的是,它创建多个线程,这些线程从不同的起始位置下载文件,这试图利用您的互联网连接的最大能力。(这将在多核处理器情况下快速下载,如下所述)。

我们可能觉得线程是并行运行的,但实际上,它们应该是依次运行的。例如,线程t1运行0.25秒,然后线程t2运行0.241秒,然后是t1,..,t2,,t1。因此,它们共享CPU突发。

  • So为什么多线程可以提高性能?回答:如果您有多核处理器,可以使用多个处理器管理线程以并行运行,从而提高性能。(这就是magic!).
  • Why多线程degrade 下载加速器IDMan是如何做到的?答:如果您使用的是单核处理器,则所有线程将作为单个进程轮流运行,共享CPU突发。在这种情况下,单线程下载比多线程更快,因为如果使用多线程,在从一个线程切换到另一个线程时会浪费一些时间。(在这种情况下,尽管使用多线程下载,但像IDMan这样的下载加速器并不能真正快速下载)。

请看这张拥有双核处理器的图片,以及线程是如何管理的。

我希望这能有所帮助!:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24087560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档