Я огляделся по всему миру и не могу найти то, что искал, но позвольте мне сначала подчеркнуть, что я не ищет высокого разрешения, прецизионная функция сна.Отказаться от процессорного времени в C++ (Windows)
Вот фон для этой проблемы я пытаюсь решить:
Я сделал библиотеку отображения памяти, которая работает много как именованный канал. Вы можете поместить в него байты, вывести из него байты и запросить, сколько байтов доступно для чтения/записи, все это хорошее.
Это быстрые (в основном) процессы, сообщающие с использованием этого, будут в среднем на 4 ГБ/с, если они передают куски байтов 8 КБ или больше. Производительность снижается примерно до 300 Мбайт/с, когда вы приближаетесь к размеру блока 512B.
Проблема:
Очень редко, на сильно загруженных серверах, очень большие времена запаздывания будет происходить (Ввысь из 5с). Моя запущенная теория для причины этой проблемы заключается в том, что при больших переносах (больше, чем размер сопоставленной памяти) процесс, который записывает данные, будет затруднять опрос, ожидая, что в циклическом буфере будет доступно больше места поверх карты памяти. Нет никаких вызовов для сна, поэтому процесс опроса может привести к потере процессора без уважительной причины! Проблема в том, что даже самый маленький вызов спать (1 мс) будет абсолютно разрушать производительность. Размер memmap составляет 16 КБ, поэтому, если он спал за 1 мс каждые 16 КБ, производительность снизилась до наилучшего варианта 16 МБ/с.
Решение:
Я хочу функцию, которую я могу назвать, что уступит процессор, но не делает никаких ограничений, когда он получает перенесен операционной системы (Windows 7 в данном случае).
У кого-нибудь есть какие-либо яркие альтернативы?/Кто-нибудь знает, существует ли такая функция?
Спасибо.
Конечно, если он работал под .NET, то это был бы C++/CLI, а не C++. :) –