Я прочитал несколько ответов (для пример) здесь, в SO, где некоторые говорят, что parallelism не будет увеличивать производительность (возможно, при чтении IO).
Но я создал несколько тестов, которые показывают, что операции WRITE выполняются намного быстрее.
- READ TEST:
Я создал случайные 6000 файлов с фиктивными данными:
Попробуйте прочитать их w/w/o parallelism:
var files =
Directory.GetFiles("c:\\temp\\2\\", "*.*", SearchOption.TopDirectoryOnly).Take(1000).ToList();
var sw = Stopwatch.StartNew();
files.ForEach(f => ReadAllBytes(f).GetHashCode());
sw.ElapsedMilliseconds.Dump("Run READ- Serial");
sw.Stop();
sw.Restart();
files.AsParallel().ForAll(f => ReadAllBytes(f).GetHashCode());
sw.ElapsedMilliseconds.Dump("Run READ- Parallel");
sw.Stop();
Result1:
Запустить READ-Serial 595
Запустить READ-Parallel 193
Результат2:
Запустить READ-Serial 316
Запустить READ-Parallel 192
- ИСПЫТАНИЕ WRITE:
Переход на создание 1000 случайных файлов, где каждый файл 300K. (Я освободил каталог из теста prev)
var bytes = new byte[300000];
Random r = new Random();
r.NextBytes(bytes);
var list = Enumerable.Range(1, 1000).ToList();
sw.Restart();
list.ForEach((f) => WriteAllBytes(@"c:\\temp\\2\\" + Path.GetRandomFileName(), bytes));
sw.ElapsedMilliseconds.Dump("Run WRITE serial");
sw.Stop();
sw.Restart();
list.AsParallel().ForAll((f) => WriteAllBytes(@"c:\\temp\\2\\" +
Path.GetRandomFileName(), bytes));
sw.ElapsedMilliseconds.Dump("Run WRITE Parallel");
sw.Stop();
Результат 1:
Запустить WRITE serial 2028
Запустить WRITE Parallel 368
Результат 2:
Запустить WRITE serial 784
Запустить WRITE Parallel 426
Вопрос:
Результаты меня удивили. Понятно, что против всех ожиданий (особенно с операциями WRITE) - производительность лучше с parallelism, но с операциями ввода-вывода.
Как/Почему результаты parallelism лучше? Похоже, что SSD может работать с потоками и что нет или меньше узких мест при запуске более одного задания за раз в устройстве ввода-вывода.
Nb Я не тестировал его с HDD (я буду рад, что тот, у которого есть HDD, будет запускать тесты.)