Задать вопрос
@tty6

Что теоретически может больше ограничить скорость потоков?

Абстрактная ситуация:
Мы на некой x86 машине хотим создавать (очень) много потоков и читать в каждом из них файл с жесткого диска.
В какое ограничение по мере увеличения количества потоков мы скорее упрёмся: будут "слишком сильные расходы на создание и управление потоками" или в "очередь доступа к ЖД".
  • Вопрос задан
  • 2269 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
@DancingOnWater
Расходы на создание потока оптимизируются пулом последних. Это не вопрос.

Вопрос в другом. Какая операционка используется? Есть ли принудительное переключение потоков? Какой объем данных читается с ЖД? Последователен ли он? Как синхронизируются потоки?
От ответов на эти вопросы будет зависеть итоговый.
Скорее всего (99%) все дело упрется в ЖД, но не факт.
Ответ написан
Комментировать
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
При увеличении числа потоков, читающих из различных мест (если файл достаточно большой) на жестком диске можно столкнуться с уменьшением производительности за счет I/O scheduling. Для жесткого диска одна из самых медленных операций это seek, который сопровождается физическим перемещением головки. Для минимизации перемещений используются различные алгоритмы. Например это могут быть модификации Elevator algorithm.
Если чтение станет узким местом, возможно стоит попробовать настроить планировщик.
Ответ написан
Комментировать
AxisPod
@AxisPod
Вы тоже хотите сделать мега быстрой копировщик файлов? Как-то видел подобный вопрос на форуме. А если же серьезно и вы действительно хотите сделать работу с кучей файлов, то в зависимости от системы надо юзать асинхронный ввод-вывод, реализации зависят от системы, но можно использовать и универсальные функции типа libevent, boost::asio и т.д. И это будет лучшим решением, на каждый HDD запускать свой обработчик событий и вперед. Ну а большое кол-во потоков тут ничем не поможет, IOPS от этого выше не станет, увеличивайте IOPS, кэшируйте в памяти.
Ответ написан
Комментировать
@xandox
Если используешь hdd, то при активном чтении из разных мест диска тебе хватит и 3-4 потока, что бы просиживать время в iowait. Для ssd не незнаю - надо мереть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы