Я довольно много осмотрелся и не могу найти то, что ищу, но позвольте мне сначала подчеркнуть, что я не ищу высокоточную функцию сна. .
Вот предыстория проблемы, которую я пытаюсь решить:
Я запомнил библиотека сопоставления, которая во многом похожа на именованный канал. Вы можете помещать в него байты, извлекать из него байты и запрашивать, сколько байтов доступно для чтения/записи, и все такое хорошее.
Это быстро (в основном) процессы, взаимодействующие с его использованием, будут в среднем достигать 4 ГБ/с, если они передают фрагменты байтов размером 8 КБ или больше. Производительность падает примерно до 300 МБ/с по мере приближения к размеру фрагмента 512 Б.
Проблема:
Очень редко , на сильно загруженных серверах время задержки будет очень большим (более 5 секунд). Моя теория причины этой проблемы заключается в том, что когда происходят большие передачи (больше, чем размер отображаемой памяти), процесс, записывающий данные, будет жестко опрашивать, ожидая, пока в реализованном кольцевом буфере освободится больше места. поверх карты памяти. Вызовов режима сна нет, поэтому процесс опроса может без веской причины нагружать процессор! Проблема в том, что даже самый маленький вызов сна (1 мс) полностью снижает производительность. Размер карты памяти составляет 16 КБ, поэтому, если она будет спать по 1 мс каждые 16 КБ, производительность упадет до наилучшего сценария — 16 МБ/с.
Решение:
Мне нужна функция, которую я могу вызвать, которая освободит процессор, но не будет ограничения на то, когда оно будет перепланировано операционной системой (в данном случае Windows 7).
Есть ли у кого-нибудь яркие альтернативы?/Кто-нибудь знает, существует ли такая функция?
Спасибо.< /п>
Подробнее здесь: https://stackoverflow.com/questions/183 ... -c-windows