Если вы сравниваете два файла на одном диске, единственное преимущество, которое вы можете получить от многопоточности, - это чтение одного потока, заполнение следующих буферов, в то время как другой поток сравнивает ранее прочитанноебуферов.
Если сравниваемые файлы находятся на разных физических дисках, вы можете одновременно выполнять два асинхронных чтения - по одному на каждый диск.
Но ваша идея иметь один потокчтение с начала и другое чтение с конца сделают вещи медленнее, потому что время поиска убьет вас.Головки дисковода будут постоянно искать от одного конца файла до другого.Подумайте об этом следующим образом: считаете ли вы, что будет быстрее читать файл последовательно с самого начала, или будет быстрее читать 64 КБ спереди, затем читать 64 КБ с конца, а затем вернуться к началу файлачитать следующие 64K и т. д.
Фрагментация - это проблема, конечно, но чрезмерная фрагментация - это исключение, а не правило.Большинство файлов будут нефрагментированными или только частично фрагментированными.Чтение поочередно с любого конца файла будет похоже на чтение файла, который патологически фрагментирован.
Помните, что типичный дисковод может удовлетворить только один запрос ввода-вывода за раз.
Создание одного-секторное чтение, вероятно, замедлит ход событий.В моих тестах скорости ввода / вывода .NET чтение 32K за раз было значительно быстрее (от 10 до 20 процентов), чем чтение 4K за раз.Как я помню (с тех пор, как я это сделал), на моей машине в то время оптимальный размер буфера для последовательного чтения составлял 256 КБ.Это, несомненно, будет отличаться для каждой машины в зависимости от скорости процессора, контроллера диска, жесткого диска и версии операционной системы.