我有一个用C ++编写的程序,它永久地将文件写入硬盘。使用的Harddisk足够快,可以在不降低应用程序速度的情况下处理这个问题。
现在我不时喜欢将文件复制/同步到我们服务器的程序。我面临的挑战是我不希望副本使用许多系统资源,因此它不会减慢应用程序或编写新文件的速度。
我想在后台线程上运行复制/同步会有所帮助,但它仍然会给Harddisk带来压力并减慢新文件的写入速度吗?
所以我想我的问题是如何控制复制操作的速度?或者还有另一种更好的方法吗?
非常感谢任何帮助。
丹尼斯
答案 0 :(得分:1)
重读这个 - “现在我不时喜欢将文件复制/同步到我们服务器的程序。我面临的挑战是我不希望副本使用很多系统资源,所以它不会减慢速度申请或撰写新文件。“
这意味着你实际上并没有试图避免努力工作;你只是不想落后于你的其他档案工作。
我创建了一个后台线程来执行所有磁盘访问;并提供2个队列供它使用。第一个是要写的新文件;第二个是要复制的文件。然后,该线程可以通过一次处理块来全速使用磁盘;优先级从新文件区域获取一个块。这将允许您开始复制;然后在有大量要处理的文件的情况下完全停止复制(如果有爆发),然后在处理完毕后尽可能快地复制。