Size: a a a

2020 December 06

SS

Slava Sokolovsky in Rust Beginners
А если будет, то тут надо какой-нибудь примитив синхронизации взять типа барьеров или что там обычно используют
источник

SS

Slava Sokolovsky in Rust Beginners
Мьютекс один из таких видов синхронизации, насколько я знаю, так что подойдёт
источник

/

/bin/cat in Rust Beginners
источник

/

/bin/cat in Rust Beginners
Можно попробовать сделать Atomic счётчик смещения и передавать в потоки сырые данные для slice
источник

SS

Slava Sokolovsky in Rust Beginners
По идее, тут задача для мьютекса. В крайнем случае это семафор, остального не надо
источник

/

/bin/cat in Rust Beginners
mutex нельзя
источник

/

/bin/cat in Rust Beginners
slice u8 живет только в скоупе main
источник

ИЛ

Иван Лещенко... in Rust Beginners
Разве у тебя поток не может пережить ВЖ слайса?
источник

/

/bin/cat in Rust Beginners
ну да
источник

ИЛ

Иван Лещенко... in Rust Beginners
/bin/cat
slice u8 живет только в скоупе main
Тут можно скоупед треды взять
источник

ИЛ

Иван Лещенко... in Rust Beginners
Иван Лещенко
Тут можно скоупед треды взять
источник

/

/bin/cat in Rust Beginners
это такой хак над join?
источник

JC

Julian =) Coffee in Rust Beginners
ну это вызывается join в конце, поэтому можно гарантировать скоуп
источник

JC

Julian =) Coffee in Rust Beginners
хотя я вообще хз, там какой-то код алегорический
источник

/

/bin/cat in Rust Beginners
Julian =) Coffee
ну это вызывается join в конце, поэтому можно гарантировать скоуп
а std так не умеет
источник

/

/bin/cat in Rust Beginners
при join все равно просит lifetime
источник

/

/bin/cat in Rust Beginners
Пашечка
Будут гонки данных :)
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c96724a1cbc1da3a52535e294a2cf771
может быть передавать sized u8 slice в каждый поток по чанкам?
источник

П

Пашечка in Rust Beginners
Ладно, всем спасибо, буду пробовать и бенчить разные подходы...
источник

SS

Slava Sokolovsky in Rust Beginners
Пашечка
Ладно, всем спасибо, буду пробовать и бенчить разные подходы...
Тут больше зависит от твоего алгоритма, конечно, и желания. А так, можно написать несколькими разными путями - от семафоров до асинков. Мы не видим твой код и его структуры не знаем, чтобы подсказать, что делать при имеющемся коде.
источник

MB

Mikail Bagishov in Rust Beginners
Пашечка
Граждане, есть идеи, как рассчитать максимально занимаемую моей программой оперативку?

Суть проблемы: есть файл, он будет очень часто анализироваться в несколько потоков. Чтобы это дело ускорить и не читать постоянно с диска, хочу загрузить его в память.

Я могу подсчитать сколько будет занимать буфер для результатов анализа, зная размер файла, знаю размер всех вспомогательных данных, которые использую, НО: как мне узнать накладные расходы на потоки, объекты синхронизации, накладные расходы стдшных структур и прочие штуки, которые я лично явно не создавал?

Собственно, зачем это: чтобы, если файл слишком большой и не поместится в ОЗУ нужное количество раз (под каждый поток же) - не читать его сразу, а когда нужно читать с диска.
Я так понимаю, тебе интересует асимптотика потребления памяти от размера файла.
Так вот, в таком случае:
накладные расходы от мьютексов постоянны
накладные расходы на потоки пропорциональны количеству потоков
накладные расходы большинства контейнеров обычно пропорцианальны размеру (потреблеямая память/минимально необходимая память <= 2)

Соответственно скорее всего выйдет прямая пропорциональность

Если смотреть на коэффициент пропорциональности, то самая большая часть тут, думаю, аллокатор.
источник