Re[4]: Проектирование, переписывание, прокрастинация :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.08.21 17:48
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Я не знаю API DirectX, но уверен, что всё можно оформить изолированно, с юнит-тестами и потом всё "сцепить" воедино


API — это для пользовательских приложений, там действительно все довольно просто и ортогонально. А я про фильтры DirectShow, которые "на той стороне" от пользовательских приложений. Каждый фильтр обязан экспортировать кучу интерфейсов, за которые его регулярно и в разной последовательности дергают и клиентские приложения, и сама подсистема управления графом. Пока их все не реализуешь, в динамике (на живых потоках) почти ничего не работает.

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

vsb>Добавить промежуточные интерфейсы где-то, например.


Пробовал. Когда их становится слишком много — начинаешь путаться еще больше.

vsb>Например когда архитектура построена в виде акторов, с одной стороны каждого актора можно тестировать, как обычный однопоточный объект, с другой стороны фреймворк, который обеспечивает запуск и взаимодействие акторов уже считается достаточно протестированным и обеспечивает многопоточность без багов (ну почти без багов, дедлок скорей всего всё ещё возможен, но всё же многие баги устраняются).


В такой структуре часто страдает производительность, поскольку для развязки потоков используются последовательные списки, сводятся к минимуму точки контакта, уменьшается количество объектов синхронизации с одновременным расширением их действия, и т.п.

vsb>Впрочем у тебя своя специфика с реалтаймом. То, о чём я пишу, достигается с некоторым оверхедом


Именно. Для большинства применений можно было бы допустить и оверхед, но есть немало случаев, где даже прилично оптимизированный код работает впритирку. Не хотелось бы потерять эти ниши.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.