1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159

Точность цикла потока и загруженность процессора

21.02.2024, 09:30. Показов 9503. Ответов 5

Студворк — интернет-сервис помощи студентам
Создаю поток со стабилизацией времени цикла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int64_t CycleNS = 100000;
    
    while (ExitT == false)
    {
        StartTim = std::chrono::steady_clock::now();
 
        // .....;
 
 
        boost::this_thread::sleep_for(boost::chrono::microseconds(
                                          CycleNS - Duration(std::chrono::steady_clock::now() - StartTim).count()));
//        while (CycleNS - Duration(std::chrono::steady_clock::now() - StartTim).count() > 0 ){}
    }
В данной ситуации стабилизация цикла плохая, время цикла «прыгает» 100-110, иногда и 120 мс, но при этом загруженность процессора низкая ~0%. Если стабилизацию сделать на while, то будет наоборот, стабилизация очень хорошая и загрузка процессора >30%. Есть возможность совместить хорошую стабилизацию цикла и низкую загрузку процессора?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2024, 09:30
Ответы с готовыми решениями:

Как только захожу в игру, загруженность процессора упирается в 100%, спустя минут 5 загруженность падает до 10-30%
Захожу я значит поиграть в Овервотч, но при заходе в игру первые 5 минут у меня загруженность процессора 90% (msi afterburner показывает...

Загруженность процессора 50%
Доброго времени суток! Сегодня появилась такая проблема - svchost.exe грузит процессор на 50%. Поискал в интернете решение проблемы:...

Загруженность процессора?
Уже нашёл ответ на Си. Помогите, пожалуйста, с "переводом" на Visual Basic. Ну а в идеале можно и сразу на PowerBasic :) #include...

5
259 / 189 / 29
Регистрация: 26.11.2022
Сообщений: 794
21.02.2024, 10:09
у вас ОС реального времени? скорее всего нет. так что вы можете добиться чего-то подходящего на вашем конкретном компьютере/ОС но на других компах/ОС будет другая ситуация.
ещё неизвестно как поведёт ваш цикл когда комп будет выполнять ещё какую-нибудь программу помимо вашей.

ну и неплохо былобы написать зачем такое надо - особенно на какую стабильность вы расчитываете
0
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
21.02.2024, 10:33  [ТС]
ОС-ы обычные Windows (разработка, тестирование...), Linux встроенная, штатная работа. Поток будет работать на отдельном ядре и общаться с аппаратурой.
0
259 / 189 / 29
Регистрация: 26.11.2022
Сообщений: 794
21.02.2024, 11:53
Вот из-за того что на обычной ОС нельзя добиться стабильных задержек приходится делать дополнительные контроллеры - которые получают от компа некоторый минимальный объём информации чтобы они могли проработать пару секунд сами без участия компьютера, поскольку комп не сможет быстро отреагировать и выдать упавляющий сигнал.

Раз уш вы не хотите рассказывать что за аппаратура, какие требования по задержкам - период, джиттер и пр. Критичность задержек, как выдаётся управляющий сигнал - есть ли промежуточный драйвер который может решить что надо подсобрать данные и попозже отправить из пакетом и куча другой инфы. То ответы тоже будут очень пространными и обобщёнными.

Не забывает также что разрабатываете вы на современном компе - с хорошим быстродействием, а работать софт будет на самом слабом железе )))
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
17.04.2024, 01:59
Знаю, что тема немного старая, но я бы посоветовал вместо sleep_for использовать sleep_until с расчётом времени "просыпания" от начала первой итерации.

Момент следующего срабатывания при этом можно получить примерно так: next_activation = start + ((now() - start) / period + 1) * period.

Использование sleep_until вместо sleep_for позволит не спать дольше в случае, если поток может быть вытеснен ОС и он будет вытеснен после вычисления таймаута для sleep_for, но до самого sleepа.

Расчёт следующей активации от начала первого цикла нивелирует дрифт в периоде, если это важно.

Так же, если решите использовать sleep_until, то стоит посмотреть реализацию. Не знаю на счёт boost, но реализация из libstdc++, например, может использовать системное время для steady_clock.

Если можно использовать непереносимое API, то в Linux есть clock_nanosleep c CLOCK_MONOTONIC и TIMER_ABSTIME, или таймеры timerfd.
1
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
17.04.2024, 08:40  [ТС]
Спасибо, протестирую Ваши варианты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2024, 08:40
Помогаю со студенческими работами здесь

Загруженность процессора
Доброго вечера всем! Есть ли в php что нибудь для определения текущей загрузки процессора процессами (операционка Linux 2.6)?

Влияет ли ОС на загруженность процессора?
Влияет ли ОС на процессор(то есть если я установлю вместо WIndows 7 Windows Xp, нагрузка на проц будет меньше?)

Windows 7 Загруженность процессора
ставил как x86 так и x64 постоянно не с того ни с сего грузится проц, сборка 7600 рус, активированная, на бета - версиях вроде таког оне...

Повышенная загруженность процессора
Здравствуйте. Возникла проблема на ноутбуке Acer Nitro 5 - в отсутствие работы каких-либо требовательных программ загрузка ЦП колеблется в...

Не понятная загруженность процессора.!
Всем здравствуйте. Несколько дней назад возникла такая странность: Постоянно системный процесс NT Kernel & System загружает мой 4-х...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Оптимизация производительности Express.js бэкенда
Reangularity 23.05.2025
Express. js заслуженно остаётся одним из самых популярных инструментов для создания бэкенда, но даже он не застрахован от проблем с производительностью. Многие разработчики сталкиваются с ситуацией,. . .
Продвинутая обработка данных с LINQ в C#
stackOverflow 23.05.2025
LINQ (Language Integrated Query) — это фундаментальное изменение парадигмы работы с данными в C#. Простые запросы Where и Select знакомы любому разработчику, но настоящая мощь LINQ раскрывается в. . .
Инфраструктура PKI и сертификатов безопасности
Mr. Docker 23.05.2025
PKI (Public Key Infrastructure) — это невидимый фундамент цифрового доверия, без которого современный интернет просто рассыпался бы как карточный домик. За этой аббревиатурой скрывается целый. . .
Аутентификация OAuth в Python
py-thonny 22.05.2025
OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах. . .
Хеширование и соль паролей в веб-приложениях C#
stackOverflow 22.05.2025
Когда-то в начале своей карьеры я тоже грешил простейшими подходами к хранению паролей – MD5-хеширование казалось верхом защиты. Но технологии не стоят на месте, вычислительные мощьности растут, и. . .
Генераторы Python для эффективной обработки данных
AI_Generated 21.05.2025
В Python существует инструмент настолько мощный и в то же время недооценённый, что я часто сравниваю его с тайным оружием в арсенале программиста. Речь идёт о генераторах — одной из самых элегантных. . .
Чем заменить Swagger в .NET WebAPI
stackOverflow 21.05.2025
Если вы создавали Web API на . NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и. . .
Использование Linq2Db в проектах C# .NET
UnmanagedCoder 21.05.2025
Среди множества претендентов на корону "идеального ORM" особое место занимает Linq2Db — микро-ORM, балансирующий между мощью полноценных инструментов и легковесностью ручного написания SQL. Что. . .
Реализация Domain-Driven Design с Java
Javaican 20.05.2025
DDD — это настоящий спасательный круг для проектов со сложной бизнес-логикой. Подход, предложенный Эриком Эвансом, позволяет создавать элегантные решения, которые точно отражают реальную предметную. . .
Возможности и нововведения C# 14
stackOverflow 20.05.2025
Выход версии C# 14, который ожидается вместе с . NET 10, приносит ряд интересных нововведений, действительно упрощающих жизнь разработчиков. Вы уже хотите опробовать эти новшества? Не проблема! Просто. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru