Форум программистов, компьютерный форум CyberForum.ru

Менеджмент жесткого диска при многопоточности - C++

Восстановить пароль Регистрация
 
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
05.01.2013, 20:49     Менеджмент жесткого диска при многопоточности #1
Пусть у меня 4-ех ядерный процессор, и запущено 4 рабочих потока (в одном процессе). Казалось бы, что все хорошо, но диск-то у меня один!

Есть какие- нибудь паттерны программирования многопоточных приложений, пытающихся "развести" потоки так, чтобы они одновременно не работали с жестким диском (или другими комплектующими)? Например, одинаковые потоки можно запускать со сдвигом по времени (только размер этого сдвига надо определять динамически на стадии выполнения программы). Или что-то типа "ленивых записей/чтений", которые выполняются, когда диск свободен...

?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
05.01.2013, 22:50     Менеджмент жесткого диска при многопоточности #2
Например, отдельный поток чтения-записи, которому остальные потоки передают заявки на такие операции. Иногда можно даже не ждать результатов, сразу бежать дальше.
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
06.01.2013, 10:02  [ТС]     Менеджмент жесткого диска при многопоточности #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Например, отдельный поток чтения-записи, которому остальные потоки передают заявки на такие операции. Иногда можно даже не ждать результатов, сразу бежать дальше.
Похоже параллельность действительно еще даже теоретически не обмозгована. Ведь если задумываться, то надо параллелить каждый вид устройства (не только процессор) и по количеству элементов этого устройства создавать необходимое количество потоков. Например, 4 потока для процессора, 2 потока для видеокарты, 1 поток для жесткого диска, 2 потока консоли (если два монитора). Каждое устройство образует свой пул потоков. А потом писать программу так, чтобы каждый пул устройства (состоящий из разного количества потоков), оптимально взаимодействовал с другими пулами устройств. "Межустройственое" взаимодействие, так сказать...

Не видел я еще размышлений на тему: как 4 потока одного устройства оптимально поделить между 2 потоками другого устройства...
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
06.01.2013, 11:34     Менеджмент жесткого диска при многопоточности #4
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Похоже параллельность действительно еще даже теоретически не обмозгована.
Ещё как обмозгована-то.
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
по количеству элементов этого устройства создавать необходимое количество потоков
Это далеко не единственный фактор, который надо учитывать при планировании потоков.
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
2 потока для видеокарты
В видеокартах счёт идёт на сотни и тысячи, и механизмы управления и планирования там уже другие. Читаем про CUDA, OpenCL и вообще GPGPU.
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Не видел я еще размышлений на тему: как 4 потока одного устройства оптимально поделить между 2 потоками другого устройства...
Это ещё не значит, что оно "даже теоретически ещё не обмозговано". Надо знакомиться с результатами таких мозгований. Например, thread pool.
Yandex
Объявления
06.01.2013, 11:34     Менеджмент жесткого диска при многопоточности
Ответ Создать тему
Опции темы

Текущее время: 21:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru