В профиле торгового движка лидируют атомарные инкременты shared_ptr
bool matches(std::shared_ptr<const Order> order, std::shared_ptr<const Rule> rule);
for (const auto& rule : rules) // 2000 правил
if (matches(order, rule)) ... // на каждый ордер
perf показывает заметное время в lock xadd и lock xsub внутри matches, при нагрузке на 16 потоках картина хуже, чем на одном. Функция не сохраняет указатели. Что исправить?
- Принимать const Order& и const Rule&
- Заменить shared_ptr на weak_ptr в параметрах
- Создавать указатели через make_shared
- Передавать shared_ptr через std::move
