Size: a a a

Rust — русскоговорящее сообществo

2020 December 07

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
То есть если сделать Ctrl-C Ctrl-V из стандартной библиотеки в свой проект, аккуратно заменить используемые в коде вектора анстейбл-фичи и снять все анстейбл-аллокации, то коллекции с обработкой OOM появятся :)
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
А как в расте принято работать с переполнением памяти? Например, судя по коду, Vec будет кидать панику если не удалось выделить память. Как понимаю кроме нестабильных методов Vec::try_reserve и Vec::try_reserve_exact остаётся только вариант с отловом и обработкой паники?
Если хочешь обрабатывать переполнение памяти - выделяй память самостоятельно через alloc.
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
polunin.ai
Если хочешь обрабатывать переполнение памяти - выделяй память самостоятельно через alloc.
Уж лучше перехватить панику или сделать oom хендлер в одном месте, чем переписывать реализацию Vec.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Проблема паники в том, что совершенно не факт что ты успеешь ее перехватить
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Уж лучше перехватить панику или сделать oom хендлер в одном месте, чем переписывать реализацию Vec.
Смотри, если у тебя микроконтроллеры у тебя все равно no_std. В каком другом случае нужно обрабатывать недостаток памяти? Я не могу придумать такой ситуации.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Я не думаю, что все разработчики библиотеки спят и думают о том, как бы им деструктор без аллокаций написать.
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
2116-alloc-me-maybe - The Rust RFC Book
https://rust-lang.github.io/rfcs/2116-alloc-me-maybe.html
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Есть пропозал и все
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
polunin.ai
Смотри, если у тебя микроконтроллеры у тебя все равно no_std. В каком другом случае нужно обрабатывать недостаток памяти? Я не могу придумать такой ситуации.
Нет, у меня обычные сервера с веб-приложениями, которые в том числе занимаются ресайзингом картинок, и было бы неплохо что бы нехватка памяти на resize не роняла всё приложение.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikail Bagishov
Я не думаю, что все разработчики библиотеки спят и думают о том, как бы им деструктор без аллокаций написать.
Я не думаю что кто-то будет что-то выделять на хипе в деструкторе🧐
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
polunin.ai
Я не думаю что кто-то будет что-то выделять на хипе в деструкторе🧐
tokio::spawn для очистки скажем, или какое-то логирование/трейсинг
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Нет, у меня обычные сервера с веб-приложениями, которые в том числе занимаются ресайзингом картинок, и было бы неплохо что бы нехватка памяти на resize не роняла всё приложение.
Ну если тебе надо тупо решить задачу то тебе помогут эвенты и проверять количество памяти. И ждать пока освободиться
источник

r

red75prime in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Уж лучше перехватить панику или сделать oom хендлер в одном месте, чем переписывать реализацию Vec.
Overcommit может привести к тому, что будет не паника при выделении памяти, а SIGKILL от оом-киллера.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Нет, у меня обычные сервера с веб-приложениями, которые в том числе занимаются ресайзингом картинок, и было бы неплохо что бы нехватка памяти на resize не роняла всё приложение.
Тогда есть предложение создавать новый поток для ресайзинга. Тогда паниковать будет только тот тред.
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
На уровне библиотеки хз
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Нет, у меня обычные сервера с веб-приложениями, которые в том числе занимаются ресайзингом картинок, и было бы неплохо что бы нехватка памяти на resize не роняла всё приложение.
Если это в одном месте происходит, то могу такое предложить: выдели память через std::alloc::alloc вручную, обработай nullptr и уже тогда делай Vec:from_raw
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikail Bagishov
tokio::spawn для очистки скажем, или какое-то логирование/трейсинг
Логирование в деструкторе? О.о
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Но коммент про OOM очень правильный - если линуксовый сервер, то при OOM  тебя просто убьет ядро
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Mikail Bagishov
Если это в одном месте происходит, то могу такое предложить: выдели память через std::alloc::alloc вручную, обработай nullptr и уже тогда делай Vec:from_raw
Хм, а это вариант. Спасибо - рассмотрю это решение если припрёт.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
polunin.ai
Тогда есть предложение создавать новый поток для ресайзинга. Тогда паниковать будет только тот тред.
abort убивает процесс целиком
источник