Size: a a a

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

2020 October 13

Д

Дима in Rust — русскоговорящее сообществo
Контрибутер 💪
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
∅ ч
типа получи футболку за пр?
нет
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Если у меня бесконечный цикл в треде, что предпочтительнее использовать после каждой итерации - thread::sleep на 1 ms или thread::yield_now, чтобы не сжирать весь ресурс?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Александр Мещеряков
Если у меня бесконечный цикл в треде, что предпочтительнее использовать после каждой итерации - thread::sleep на 1 ms или thread::yield_now, чтобы не сжирать весь ресурс?
У него тело есть?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Александр Мещеряков
Если у меня бесконечный цикл в треде, что предпочтительнее использовать после каждой итерации - thread::sleep на 1 ms или thread::yield_now, чтобы не сжирать весь ресурс?
Await delay всегда делаю
источник

M

Mnwa in Rust — русскоговорящее сообществo
Александр Мещеряков
Если у меня бесконечный цикл в треде, что предпочтительнее использовать после каждой итерации - thread::sleep на 1 ms или thread::yield_now, чтобы не сжирать весь ресурс?
Смотря что тебе нужно там вычислять, yield - это системный вызов и он может быть дорогим
Если на это пофиг, то юзай его, если нет, то есть еще такой вариант spin_loop_hint, но он не взаимодействует с осью
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Александр Мещеряков
Если у меня бесконечный цикл в треде, что предпочтительнее использовать после каждой итерации - thread::sleep на 1 ms или thread::yield_now, чтобы не сжирать весь ресурс?
Еще можно sleep(0)!
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Имхо слип дорогой. А авейт дешёвый всегда
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
А всем же важно наносеки экономить
источник

DO

Do c Tor O r` Ry in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
А всем же важно наносеки экономить
после питона вообще похуй на наносеки
источник

DO

Do c Tor O r` Ry in Rust — русскоговорящее сообществo
можно все через арки писать и наслаждаться скоростью
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Do c Tor O r` Ry
можно все через арки писать и наслаждаться скоростью
Циклами*
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Эрик
У него тело есть?
да
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mnwa
Смотря что тебе нужно там вычислять, yield - это системный вызов и он может быть дорогим
Если на это пофиг, то юзай его, если нет, то есть еще такой вариант spin_loop_hint, но он не взаимодействует с осью
Ну, вообще, вон выше spin_loop_hint предложили: почитай доки к этой функции, может подойдёт. Хотя если ты не примитив пишешь, а какой-нибудь мутекс в цикле проверяешь, то скорее всего не подойдёт.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Хотя чего мутекс в цикле проверять, просто локнул и ждёшь.
источник

МП

Максим Петров... in Rust — русскоговорящее сообществo
Александр Мещеряков
Если у меня бесконечный цикл в треде, что предпочтительнее использовать после каждой итерации - thread::sleep на 1 ms или thread::yield_now, чтобы не сжирать весь ресурс?
Если у треда есть некоторое условие, при истинности которого он должен совершать работу, а при ложности ничего не делать, то лучше блокировать тред до достижения этого условия через какой-нибудь Condvar. Простой же слип или yield оставляют треду возможность проснуться в то время, когда работы нет. Другое дело, если работу нужно выполнять всегда, но с некоторой периодичностью, тогда лучше sleep (он хотя бы не будет будить чаще положенного, а yield по идее может).
источник

АМ

Александр Мещеряков... in Rust — русскоговорящее сообществo
Хорошо, всем спасибо!
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Александр Мещеряков
Хорошо, всем спасибо!
у меня оно работает так:

impl CompanyInvalidationService {
   pub async fn run_invalidation(mut self) {
       let delay = Duration::from_secs(30);
       let mut prev_query_date: Option<SystemTime> = None;

       loop {
           ...
           delay_for(delay).await;
       }
   }
}

...

actix_rt::spawn(invalidation_service.run_invalidation());
источник

Э

Эрик in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
у меня оно работает так:

impl CompanyInvalidationService {
   pub async fn run_invalidation(mut self) {
       let delay = Duration::from_secs(30);
       let mut prev_query_date: Option<SystemTime> = None;

       loop {
           ...
           delay_for(delay).await;
       }
   }
}

...

actix_rt::spawn(invalidation_service.run_invalidation());
А если у него синхронщина? Рантайм тащить ради слипа?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
не знаю, я ему ничего не советую. Я говорю что у меня работает вот так
источник