Multithreading 为IO绑定任务创建的最佳线程数是多少?

Multithreading 为IO绑定任务创建的最佳线程数是多少?,multithreading,io,Multithreading,Io,我想下载一堆小MP3文件,把它们合并成一个大文件。我想知道,如果有一个具有四个内核的CPU,创建几个线程是否会缩短下载所有文件所需的时间。如何确定要创建的最佳线程数?这会有帮助吗?大量编辑,请参阅评论了解原因 是的,会有帮助的。然而,瓶颈更可能是文件的来源。我假设在本答案的其余部分中,您的数据将全部托管在一个源上 有更多多线程经验的人可能在线程和内核方面有更好的输入,但我不确定这是否重要 你可能需要做一些实验来找到最合适的,但这取决于很多因素,比如带宽、服务器配置、源服务器数量,以及同时使用应用

我想下载一堆小MP3文件,把它们合并成一个大文件。我想知道,如果有一个具有四个内核的CPU,创建几个线程是否会缩短下载所有文件所需的时间。如何确定要创建的最佳线程数?这会有帮助吗?

大量编辑,请参阅评论了解原因

是的,会有帮助的。然而,瓶颈更可能是文件的来源。我假设在本答案的其余部分中,您的数据将全部托管在一个源上

有更多多线程经验的人可能在线程和内核方面有更好的输入,但我不确定这是否重要

你可能需要做一些实验来找到最合适的,但这取决于很多因素,比如带宽、服务器配置、源服务器数量,以及同时使用应用程序访问这些文件的人数(假设不只是你)

根据我的假设,我会说3-6是一个神奇的数字。以下是我对原因的看法:

如果你有更多的下载,下载速度很可能会减慢。 因为我们讨论的是较小的文件,所以启动和停止传输的开销很大。 如果是大文件,我会说从3开始,但由于上面提到的开销,您可能希望将其增加一倍。 正如在评论中提到的,线程将有很多CPU使用率较低的时期,因此带宽和服务器瓶颈可能比CPU核的数量更重要。
为IO绑定任务创建的附加线程的最佳数量为零。您需要异步IO。线程只能帮助执行CPU限制的任务。下载管理器允许您同时下载多个文件。虽然并发下载的数量与CPU或线程无关,但它取决于可用带宽和服务器端限制。您可以尝试一次下载100个文件,如果您有一个快速连接,并且服务器允许这样做。实际上,内核和线程与简单的并发下载无关。您在下载管理器中设置了多少并发下载,为什么?这与您的网络连接、服务器端节流以及服务器允许您创建的并发连接数有关。我有这个想法,但在没有其他限制的详细信息的情况下,假设有一台服务器,3-4似乎是正确的答案,或者至少是一个起点。我想不出更好的方法来解释我的思考过程。为什么?这完全是武断的。下载主要是空闲时间。即使您阻塞了线程,CPU仍将显示最小使用量。如果使用异步API,在等待服务器响应时,CPU使用率将为0最初的3到4个想法来自使用下载管理器从单个服务器下载文件的经验,以及关于BitTorrent如何工作的一些想法,因为我们谈论的是小文件。但你是对的,我的回答听起来像是写错了。我会解决的。现在应该更有意义了。