10-100 мс с простоями некоторых ядер: это не накладные расходы на переключение контекста, поскольку коммутатор на несколько порядков быстрее, чем эти задержки, даже при перестановке ядра и очистке кэша.
Асинхронный ввод-вывод не очень поможет здесь. Пулы потоков ядра, которые реализуют ASIO, также должны быть запланированы / заменены, хотя это быстрее, чем потоки пользовательского пространства, так как количество циклов Вагнера меньше. Я бы, конечно, отправился в ASIO, если бы загрузка процессора становилась проблемой, но это не так.
Вам не хватает процессора, так что же это? Много ли побоев - нехватка оперативной памяти? Чрезмерный пейджинг может привести к большим задержкам. Где ваш файл подкачки? Я перенес свой диск с диска C на другой быстрый диск SATA.
пропускная способность PCI? У вас там есть пара телевизионных карт?
Операция очистки контроллера диска - есть ли у вас SSD, который приближается к емкости? Это всегда хорошо для необъяснимых пауз. Я получаю странную паузу, хотя мой 128G SSD заполнен только на 2/3.
У меня никогда не было проблем, конкретно связанных со временем смены контекста, и я десятилетиями писал многопоточные приложения. Операционная система Windows довольно быстро планирует и отправляет готовые потоки на ядра. Само по себе «несколько десятков потоков» (т.е. не все запущены!) Не является проблемой удаленно - теперь, глядя на мой TaskManger / производительность, у меня загружено 1213 потоков и вообще нет проблем с производительностью ~ 6% загрузки ЦП, (приложение в тестовом режиме работает в фоновом режиме, BitTorrent и т.д.). Firefox имеет 30 потоков, VLC media player 27, мое тестовое приложение 23. Нет проблем при написании этого поста.
Учитывая вашу проблему с задержками в 10-100 мс, я был бы удивлен, если работа с приоритетами потоков и / или изменение способа загрузки вашей работы в потоки дает какое-то улучшение - что-то еще наполняет вашу систему (у вас нет какие-нибудь драйверы, которые я написал, не так ли? :).
Дает ли perfmon какие-либо подсказки?
Rgds,
Martin