Multithreading 关于多线程下载的缺点
我有一个关于多线程下载的问题,正如您所知,使用多个线程下载可以提高应用程序的性能,但是有一些措施需要考虑:比如线程的数量、可用带宽等等,但我不太明白,例如,为什么应用程序的性能会因为使用多线程而降低,或者服务器的带宽、质量如何影响多线程应用程序的性能,单线程下载比多线程下载快的情况有哪些?Multithreading 关于多线程下载的缺点,multithreading,download,Multithreading,Download,我有一个关于多线程下载的问题,正如您所知,使用多个线程下载可以提高应用程序的性能,但是有一些措施需要考虑:比如线程的数量、可用带宽等等,但我不太明白,例如,为什么应用程序的性能会因为使用多线程而降低,或者服务器的带宽、质量如何影响多线程应用程序的性能,单线程下载比多线程下载快的情况有哪些? 谢谢您的回复。我想您指的是下载管理器 首先,我怀疑下载管理器到底能带来多少“性能”好处。但更重要的是,由于多线程,它们提供的任何好处都是而不是。下载的性能约束是连接的带宽。这就是为什么我对这些好处持怀疑态度:
谢谢您的回复。我想您指的是下载管理器 首先,我怀疑下载管理器到底能带来多少“性能”好处。但更重要的是,由于多线程,它们提供的任何好处都是而不是。下载的性能约束是连接的带宽。这就是为什么我对这些好处持怀疑态度:
- 1 Mbps连接将以1 Mbps的速度下载
- 将文件拆分为4个段意味着您以256 Kbps和4*256 Kbps=1 Mbps的速率下载每个段
- 如果服务器限制每个下载段,您可能会得到一些改进
- 如果其中一个网段超时,您可能会得到一点好处:其他网段的下载意味着您的连接不会在超时等待期间处于空闲状态
- 您还可以通过“淹没”试图使用该连接的任何其他内容来加快下载速度。(但我并不认为这是一种好处。)
- 缓慢的任务(结合大量下载的不同部分)可以在不同的线程上完成,而不会干扰需要快速反应的其他线程(如用户界面)
- 并发任务还可以更有效地使用更多可用资源(多个CPU)。请注意(在回答问题的最后一部分时),如果您只有一个CPU,那么您的线程将被操作系统“时间切片”,因此它不是真正的并发线程。但是时间片非常小,所以之前的好处仍然适用
- 理想情况下,您的多个任务不应共享数据。因为如果他们这样做了,那么您就有可能面临竞争条件或并发错误
- 当他们必须共享数据时,您需要以某种方式同步工作,以避免上述错误。(有许多技术可供选择,具体取决于您的需要,我在这里不详细介绍。)
- 但是,如果您的同步计划不周,您可能会遇到许多问题,这些问题会显著降低应用程序的速度。这些措施包括:
- 限制共享资源,使多个线程在任何情况下都无法同时运行
- 高锁争用,任务等待时间比工作时间长
- 即使是死锁也会完全阻塞某些任务
- 那么为什么多线程可以提高性能呢? 答:如果您有多核处理器,可以使用多个处理器管理线程并行运行,从而提高性能。(这就是像IDMan这样的下载加速器的神奇之处!)
- 为什么多线程会降低性能? 答:如果您有单核处理器,则所有线程将作为单个进程轮流运行,共享CPU突发。在这种情况下,单线程下载比多线程更快,因为如果使用多线程,从一个线程切换到另一个线程会浪费一些时间。(在这种情况下,像IDMan这样的下载加速器不会真正快速下载,尽管有多线程下载)
我希望这有帮助!:-) 我认为您低估了每个连接的下载被限制的频率。最近,在我意识到某些大型应用程序需要30分钟下载(200kbps)的原因是每个连接的限制后,我一直在使用多线程下载程序。现在这些下载每分钟需要1分钟