我需要開發能夠比OS複印件使用1個線程讀取源文件,而另一個線程來寫它們複製更快的應用程序。源文件和目標文件位於不同的硬盤驅動器中。多線程文件拷貝到不同的硬盤c。使用驅動++
我的問題是如何通過結果的源讀取線程進入目標寫入線程,而不會導致一些競爭條件,仍然保持在複製過程中的頂級性能實現了比OS拷貝更快複製過程。
我需要開發能夠比OS複印件使用1個線程讀取源文件,而另一個線程來寫它們複製更快的應用程序。源文件和目標文件位於不同的硬盤驅動器中。多線程文件拷貝到不同的硬盤c。使用驅動++
我的問題是如何通過結果的源讀取線程進入目標寫入線程,而不會導致一些競爭條件,仍然保持在複製過程中的頂級性能實現了比OS拷貝更快複製過程。
採用有界隊列。
你可以使用任何隊列(TBB,性病:: deque的,cirtular buffer,等等)。如果它不是線程安全的和/或阻塞,那麼在它周圍進行同步並使用conditional variables進行通知。你不需要聰明的招數在隊列中,因爲指針傳遞到數據塊到隊列的速度要快得多,則I/O,但如果你真的想過度優化再檢查disruptor(描述here)。
要評論者:請注意,問題是關於不同硬盤之間的複製,所以多線程副本將受益。
讓我們看看你已經嘗試過的代碼。 – MrDuk
如果目標駐留在同一個硬盤上,那麼添加更多線程不太可能爲性能改進做許多工作。 –
操作系統的編寫者可能會花費大量時間儘可能高效地執行他們的複製例程,並且他們具有熟悉其操作系統工作方式的優勢。所以我不會屏住呼吸,得到比他們更快的結果。 –