Re[9]: Что такое realtime?
От: vdimas Россия  
Дата: 05.01.25 21:53
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Почему бы и нет, если требования разумны? Вполне логично было бы, например, использовать "десктоп общего назначения" для воспроизведения музыки и показа картинок в клубе.


Это не тот реалтайм.
Через буферирование до 1-2 сек требования к "реалтаймовости" снижаются до примерно этих значений. ))


ЕМ>Но та же винда без специального допиливания и жесткого контроля всего софта имеет свойство запинаться в случайные моменты времени.


Это только обновления, плановое обслуживание дисков (если HD) и проверка на вирусы/трояны.
Всё это отключается через политики простым скриптом.


ЕМ>Если умудрится обходиться без общих ресурсов системы (например, файлов).


Ну, когда разговор о реалтаймовых системах, то обычно подразумевают малый порядок времени отклика...
Какие там уже файлы? ))
Шаренная память, конечно.


V>>Там всей разницы, что ожидающий на семафоре или HEVENT такой поток получает тики проца в Windows сразу же при установке примитива сигнализации

ЕМ>Не "получает", а может получать

Не, в случае наивысшего приоритета потока — получает железно 100%-но! ))


ЕМ>и не "тики проца", а временное повышение приоритета, а до тиков проца в этот момент еще очень далеко.


Если проц не был занят другим потоком с этим наивысшим приоритетом, то без разговоров привязанный через affinity проц тут же переключается на ожидающий на примитиве сигнализации реалтаймовый поток. Стоимость переключения контекста — чуть более сотни наносекунд на современном железе, это примерно нижний предел отзывчивости такой схемы.

Я с этим одно время плотно экспериментировал с дровами ASIO, добивался задержки обработки звука 2 мс, где комп представлял из себя гитарную самописную примочку.


V>>>>стоит использовать lock-free техники.

ЕМ>>>Стоит, но кто бы это делал в той же винде...
V>>Там это делали отродясь, по крайней мере в дровах от самой MS.
ЕМ>Э-э-э... В каких именно драйверах от MS Вы видели "lock-free техники"? Может, конечно, и есть отдельные примеры, которых я не видел, но "отродясь" там все тупо на спинлоках, мьютексах и событиях.

Там lock-free очереди.
Причём, что забавно, примерно такие же (вернее, почти в точности такие же) очереди я "изобрел" и вылизал в нулевые, пока MS однажды не открыла исходники своей библиотеки для построения межпотоковой обработки данных. Причём, все годы до этого я несколько переживал насчёт своей схемы (многократно мысленно и в тестах трассировал, там достаточно много было тонкостей), но, увидев практически один-в-один реализацию, вздохнул с облегчением.

В общем, в этой схеме при высокой нагрузке примитив сигнализации практически не дергается (или не дёргается вовсе).
Он дёргается только при низкой нагрузке, т.е. когда система находится большую часть времени в режиме ожидания.

В любом случае, не проблема дёрнуть HEVENT или семафор из разных потоков, бо там lock-free в цикле унутре ядра на этих примитивах.
Проблема может быть, например, с мьютексом или другими ресурсами, доступ к которым организован как исключительный.
Так вот, этого исключительного одновременного доступа из драйвера и из юзерского кода быть не должно.


V>>RAII требует реакции на исключения.

ЕМ>Сам по себе — не требует, и никогда не требовал, он вообще ничего не знает о существовании исключений.

Дык, в случае исключений вызывается таблица деструкторов на каждом уровне исключений.


V>>дело только за вызовами деструкторов по выходу из scope.


ЕМ>Именно.


ЕМ>>>А что такое "динамическая инициализация глобальных объектов"?

V>>Это когда у глобальных/статических переменных вызывается конструктор и в конце работы модуля деструктор.
ЕМ>Это ж всегда называлось статической инициализацией

Фаза статической инициализации — это загрузка модуля загрузчиком ОС.
Это инициализация глобальных переменных константами времени компиляции или константами времени загрузки модуля (например, физическими адресами ф-ий и глобальных переменных).


ЕМ>ибо программа в этом не участвует, за нее это делает CRT.


Эта часть называется динамической инициализацией, т.к. уже исполняется пользовательский код (тела конструкторов).
В фазе статической инициализации пользовательский код не исполняется.


ЕМ>Тоже элементарно реализуется в ядерном коде, я такое давно использую.


Это ты линковался с подменой каких-нить конкретных кишок CRT конкретного компилятора своими хелперами?

Или речь о самописной подсистеме, эмулирующей происходящее, но заставляющей оформлять глобальные переменные неким особым образом (т.е. не обеспечивающей гарантии языка)?
Второе я делал банально для TLS-объектов, бо в прошлых стандартах оно не работало. ))
Отредактировано 05.01.2025 21:58 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.