Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Оптимизация check #30

Closed
Senbjorn opened this issue Mar 21, 2024 · 2 comments
Closed

Оптимизация check #30

Senbjorn opened this issue Mar 21, 2024 · 2 comments
Assignees
Labels
enhancement New feature or request wontfix This will not be worked on

Comments

@Senbjorn
Copy link

Senbjorn commented Mar 21, 2024

При вызове check приходится ходить по каждой ветке графа вложенных токенов.
Если хранить parent и вызывать cancel у parent при вызове cancel токена, то кажется при check в этом случае надо будет проверить только состояние текущего токена. В целом, в оригинальном подходе и в предложенном выше надо ходить по графу, но в предложенном варианте мы уже знаем по какой ветке надо идти, поэтому совокупное количество проходов значительно сократиться.

@Senbjorn
Copy link
Author

Senbjorn commented Mar 22, 2024

P. S. cancel становится тяжелее, а check максимально легковесный. Кажется это большой плюс, так как скорее всего вызовов cancel ожидается меньше, чем вызовов check

@pomponchik pomponchik added the enhancement New feature or request label Aug 3, 2024
@pomponchik pomponchik self-assigned this Aug 3, 2024
@pomponchik
Copy link
Owner

Привет!

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

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

Есть главная причина, почему я решил выбрать не его:

  • Он не учитывает то, как работают самоотменяемые виды токенов, например ConditionToken. Для того, чтобы отследить выполнение произвольного условия, необходимо вызвать переданный пользователем библиотеки callable. В ситуации "разворота" опроса статуса это просто не будет работать.

Мы можем также рассмотреть гибридные реализации, например когда явная отмена child приводит к отмене parent, но все же parent также продолжает проверять все вложенные токены на случай, если среди них есть самоотменяемые. Этот вариант может выглядеть привлекательно, однако я вынужден был отказаться и от него по ряду причин:

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

@pomponchik pomponchik added the wontfix This will not be worked on label Aug 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request wontfix This will not be worked on
Projects
None yet
Development

No branches or pull requests

2 participants