1

我必须以最快的方式复制数千个文件。使用它是个好主意ThreadPool吗?

我可以排队这么多项目吗?

有更好的解决方案吗?

更新

我想复制到不同的网络位置(随机)。

4

3 回答 3

10

您将受到 IO 限制,而不是 CPU 限制......在这里使用许多线程没有多大意义。这实际上可能会使事情变慢(尤其是在旋转磁盘上 - 您将增加寻道时间并降低缓冲区效率)。IMO,您不妨在单个后台线程上按顺序处理它们。

于 2012-08-01T07:41:46.607 回答
4

如果文件被复制到相同的目标磁盘/网络位置或从相同的源磁盘/网络位置,那么瓶颈将是数据读取/写入而不是 CPU,因此使用多个线程将毫无用处。

于 2012-08-01T07:41:54.733 回答
2

是的,如果目标目的地通过网络连接,多线程或异步线程池肯定会加快整体传输速度,特别是如果“数千个文件”足够小,以至于建立连接的延迟占很大一部分的传输时间。

您应该使传输任务/线程的数量可配置,以便将您的系统调整为可用的网络资源。以一种自适应的、自动化的方式来做这件事将是一个有趣的练习:)

仅使用一个线程/异步任务将导致真正糟糕的性能,尤其是对于高带宽但高延迟的链接,其中每个文件的连接设置时间非常重要 - 网络将被严重利用不足。

于 2012-08-01T08:22:57.580 回答