Краткий ответ: учитывая, что вы пишете на флэш-диск, я не ожидал бы, что количество потоков так или иначе сильно изменится.Но если бы это имело значение, я бы ожидал, что несколько потоков будут быстрее, чем один поток, а не медленнее.
Более длинный ответ:
Я написал программу, аналогичную той, которую вы описываетеоколо 6 лет назад - он работал на встроенной плате PowerPC Linux и считывал / записывал несколько одновременных аудиофайлов на / с жесткого диска SCSI.Первоначально я написал это с помощью одного потока, выполняющего ввод / вывод, потому что я думал, что это даст лучшую пропускную способность, но оказалось, что это не так.
В частности, когда несколько потоков читали / записывалиуровень SCSI сразу узнал обо всех ожидающих запросах от всех различных потоков и смог переупорядочить запросы ввода-вывода так, чтобы поиск головки диска был минимизирован.В сценарии однопотокового ввода-вывода, с другой стороны, уровень SCSI знал только об одном «следующем» невыполненном запросе ввода-вывода и, таким образом, не мог выполнить эту оптимизацию.Во многих случаях это означало дополнительное перемещение головки привода и, следовательно, более низкую пропускную способность.
Конечно, ваше приложение не использует SCSI или вращающийся диск с головками, которые нужно искать, так что это может не быть проблемой длявы - но могут быть другие оптимизации, которые может выполнять уровень файловой системы / аппаратного обеспечения, если он знает о нескольких одновременных запросах ввода-вывода.Единственный реальный способ выяснить это - попробовать различные модели и измерить результаты.
Я бы предложил отделить дисковый ввод-вывод от сетевого ввода-вывода, переместив дисковый ввод-вывод в поток.-бассейн.Затем вы можете изменить максимальный размер пула потоков ввода-вывода от 1 до N и для каждого размера измерить производительность системы.Это даст вам четкое представление о том, что лучше всего работает на вашем конкретном оборудовании, без необходимости переписывать код более одного раза.