Size: a a a

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

2017 November 26

AS

Anton Shramko in Rust — русскоговорящее сообщество
Vladimir
Короче про треды вне фьюч вообще забудь - они не нужны
поясни плез
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Anton Shramko
как заимплементить свой вечный реактор запущенный в отдельный тред, и в который можно в рантайме хуярить фьючи
@c_vld а ты уверен что Handle Sync+Send?
Так то нет, так что если @tapok_satan хочет херачить из других тредов задачи, нихера не прокатит.

Если надо из других потоков, то создаешь future::sync::mpsc::channel, ресивер в тред с ивентлупом, в него из других тредов шлешь задачи.
Receiver — это стрим, че-то типо того будет:
let receiver = ...
let core = Core::new()?;
let handle = core.handle();
let future = receiver.for_each(|task| handle.spawn(process_task_future(task)));
core.run(future)?;
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Vladimir
Короче про треды вне фьюч вообще забудь - они не нужны
Не будь так категоричен
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Иногда нужны
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Не факт что в его задаче
источник

V

Vladimir in Rust — русскоговорящее сообщество
Ну есть же cpu-pool всякий, ему вообще Токио вроде параллельно?
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
CpuPool не то, он для блокирующихся задач
источник

V

Vladimir in Rust — русскоговорящее сообщество
Всмысле, я про тредпул для фьючерсов
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
> он для блокирующихся задач
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Типа для long-running
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Либо по CPU тяжелых
источник

V

Vladimir in Rust — русскоговорящее сообщество
Стоп
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Либо если никак не заасинкать
источник

V

Vladimir in Rust — русскоговорящее сообщество
Так это разные вещи
источник

A

Anton in Rust — русскоговорящее сообщество
Anton Shramko
или да - тот же winit можно работать только через обычный ивентлуп - без привязки к реактору
enum Transition {
   Move(i32, i32),
   Resize(i32, i32),
   Opacity(f16),
}


tx, rx = channel();

// Anim
thread(|_|{

   handle = tokio::core();

   loop {
       anim = rx.recv();
       // Craete future using handle
   }
})


// main_loop
источник

V

Vladimir in Rust — русскоговорящее сообщество
Зачем ему Токио, если у него анимации, это какраз таки то что блокирует поток
источник

ML

Mike Lubinets in Rust — русскоговорящее сообщество
Anton
enum Transition {
   Move(i32, i32),
   Resize(i32, i32),
   Opacity(f16),
}


tx, rx = channel();

// Anim
thread(|_|{

   handle = tokio::core();

   loop {
       anim = rx.recv();
       // Craete future using handle
   }
})


// main_loop
Нет, не стоит юзать обычные mpsc, когда есть фьбчерсовский, а то ему нечего будет в ивертлуп пихать
источник

AS

Anton Shramko in Rust — русскоговорящее сообщество
просто если представить что сначала я делаю полностью всю инициализацию - в контекст забиваю все блоки и обработчики, и потом запускаю ивентлуп окна, и в нем делаю положим еще и обработку того где какая кнопка по позиции например при скролле, в каждой итерации - отзывчивость будет нулевая, также если я запускаю эвентлуп окна в основном потоке - я не смогу запустить реактор, и учитывая проблему того что если я в итерации эвентов окна буду проводить вычисления кликов относительно позиций вьюх их перебирая - то обработку позиций и конечных кликов там и других действий над виджетами - для отзывчивости их надо сделать ленивыми
источник

A

Anton in Rust — русскоговорящее сообщество
Mike Lubinets
Нет, не стоит юзать обычные mpsc, когда есть фьбчерсовский, а то ему нечего будет в ивертлуп пихать
Там я не ковырялся =)
источник

A

Anton in Rust — русскоговорящее сообщество
Но суть такая
источник