Size: a a a

cxx.Дискуссионная

2020 April 05

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Сортировка обеспечивается алгоритмом обхода. При изменении дерева оно балансируется
Итерации по дереву слишком дорогие
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Alexander Zaitsev
так, стоп. а когда ConfigManager превратился в TaskManager?
Скоро увидим gnu manager collection
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
Roy Mustang
Итерации по дереву слишком дорогие
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
звучит как ещё одна задача для профилирования
источник

RM

Roy Mustang in cxx.Дискуссионная
Я провел небольшие тесты у себя, если учесть что я планировал итерироваться в loop по всем существующим сущностям: monsters, effects, players, то в худшем случае мой сервер, который отвечает за локацию и механику боя будет иметь 25000 Entity (это при условии, что одному серверу будет выдано поддержка нескольких локаций)
источник

RM

Roy Mustang in cxx.Дискуссионная
В итоге, итерации по вектору показывает что итерироваться даже по 25к объектам не тратит у меня почти никакого времени
источник

RM

Roy Mustang in cxx.Дискуссионная
Но тут есть еще один момент
источник

IO

Igor Okhremchuk in cxx.Дискуссионная
А какие ограничения у клиента по количеству объектов?
источник

RM

Roy Mustang in cxx.Дискуссионная
В действительности нет необходимости итерироваться между всеми Entity, а так же Task в TaskManager при тиках. Для Entity, например, существует переменная отвечающее за время, когда у данного Entity должен вызваться Callback с Update
источник

RM

Roy Mustang in cxx.Дискуссионная
Тем самым, маловероятно что даже заспавнив 1к объектов разом мы получим у всех Entity одно и тоже время
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
Igor Okhremchuk
А какие ограничения у клиента по количеству объектов?
as much as possible :)
источник

MB

Mikail Bagishov in cxx.Дискуссионная
Roy Mustang
Я понимаю что там древо, оно автоматом сортируется ?
То, что оно отсортировано - это его инвариант. Когда в сет вставляется ключ, он так поменяет структуру своего дерева, чтобы дерево осталось отсортированным. Как именно это происходит - зависит от того, какое именно дерево используется.
источник

RM

Roy Mustang in cxx.Дискуссионная
Так что тут можно сделать некую погрешность, итерации по прежнему будут по 25к Entity, но вот выполняться callback функции будут лишь у десятка из них, а это понижает сложность в методе Tick
источник

RM

Roy Mustang in cxx.Дискуссионная
Нет необходимости каждый тик выполнять callback'и у Entity и обрабатывать их логику, для существ достаточно делать это каждые 0.05 мсек к примеру или даже 0.1
источник

RM

Roy Mustang in cxx.Дискуссионная
Mikail Bagishov
То, что оно отсортировано - это его инвариант. Когда в сет вставляется ключ, он так поменяет структуру своего дерева, чтобы дерево осталось отсортированным. Как именно это происходит - зависит от того, какое именно дерево используется.
Древо вроде сортируется в зависимости от того, какое значение у ключа, Если ранее ключ был A, то вставляя AB оно поместится в A разветвление
источник

RM

Roy Mustang in cxx.Дискуссионная
Вроде так это устроено
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
Roy Mustang
Древо вроде сортируется в зависимости от того, какое значение у ключа, Если ранее ключ был A, то вставляя AB оно поместится в A разветвление
тебе уже сказали - зависит от дерева
источник

RM

Roy Mustang in cxx.Дискуссионная
Так как поступить? В данный момент в моем TaskManager используется std::map, но его итерации дорогие
источник

RM

Roy Mustang in cxx.Дискуссионная
Да я понимаю что он уже отсортирован, но это не меняет той сути что создав разом N задач они все попытаются вызваться в один тик
источник

RM

Roy Mustang in cxx.Дискуссионная
Что если прибегнуть к той же тактике что и с Entity? Что если не сортировать вектор, а просто итерироваться по нему проверяя, настало ли время вызывать задачу, если да - вызываем
источник