Size: a a a

2020 August 29

П

Паша Зерриканский... in Rust Async
Привет.
А есть смысл использовать однопоточный Токио для веб сервера с веб сокетами вместо мультипоточного с вытекающими mutex, RwLock, etc?
источник

t

this is not mrklf in Rust Async
Паша Зерриканский
Привет.
А есть смысл использовать однопоточный Токио для веб сервера с веб сокетами вместо мультипоточного с вытекающими mutex, RwLock, etc?
Актикс почти так и делает.
источник

A

Adv0cat in Rust Async
Паша Зерриканский
Привет.
А есть смысл использовать однопоточный Токио для веб сервера с веб сокетами вместо мультипоточного с вытекающими mutex, RwLock, etc?
мутексы и рвлоки вам нужны будут если данные между потоками шарить будете, если каждый поток занимается своими данными, то вам мульти поток не страшен)
источник

П

Паша Зерриканский... in Rust Async
Adv0cat
мутексы и рвлоки вам нужны будут если данные между потоками шарить будете, если каждый поток занимается своими данными, то вам мульти поток не страшен)
Да, есть расшаренная мапка просто с записями сессий.
источник

AV

A V in Rust Async
Паша Зерриканский
Привет.
А есть смысл использовать однопоточный Токио для веб сервера с веб сокетами вместо мультипоточного с вытекающими mutex, RwLock, etc?
ну тебе в любом случае придётся использовать механизмы синхронизации
источник

П

Паша Зерриканский... in Rust Async
A V
ну тебе в любом случае придётся использовать механизмы синхронизации
В одном потоке нет
источник

AV

A V in Rust Async
просто в случае однопоточного запуска можно обойтись без Send
источник

AV

A V in Rust Async
Паша Зерриканский
В одном потоке нет
да
источник

AV

A V in Rust Async
грубо говоря, ты не можешь скрестить Arc и объект с &mut-методами без прослойки типа Mutex/RwLock/RefCell и т.п.
источник

П

Паша Зерриканский... in Rust Async
Да это понятно.
Я просто хотел понять насколько сильный оверхед с синхронизацией в мульти потоках, чем просто взять один поток и там держать веб-сокет эхо-сервер грубо говоря
источник

AV

A V in Rust Async
я бы не парился насчёт оверхеда от мутекса, честно говоря
источник

AV

A V in Rust Async
если говорить предметно, то нужен пример того что ты хочешь реализовать
источник

П

Паша Зерриканский... in Rust Async
A V
если говорить предметно, то нужен пример того что ты хочешь реализовать
Да просто веб-сокет сервер для открытия терминалов юниксовых в браузере через xtermjs
Просто shared мапка с сессиями и пересылка данных между терминалами хостов и браузером
Я там уперся в такую штуку, как хранить сокет стрим в мапе, чтобы потом сокет закрывать. Там при создании сокета он мувается (https://github.com/snapview/tokio-tungstenite/blob/master/examples/server.rs#L44) и как мне его в мапку класть, чтобы между потоками можно было писать в стрим и закрывать его.
источник

PL

Paul ❌ Loyd in Rust Async
Паша Зерриканский
Да, есть расшаренная мапка просто с записями сессий.
dashmap
источник

PL

Paul ❌ Loyd in Rust Async
А ещё объекты вроде сессий можно в слабах хранить (sharded_slab)
источник

PL

Paul ❌ Loyd in Rust Async
Ещё для поэлементных локов лучше parking_lot или spin использовать, т.к. стандартные боксируются, т.к. pthread примитивы не должны муваться
источник
2020 August 30

П

Паша Зерриканский... in Rust Async
Спасибо
источник
2020 September 04

11

123 123 in Rust Async
Используют actix_rt + awc(actix-web-client). async main(). Такой вопрос. Мне внутри main() надо цикл создвать? или оно там неявно в самом этом рантайме зацикливается? задача - простенький клиент который будет работать как демон
источник
2020 September 05

AI

Alex Ilizarov in Rust Async
123 123
Используют actix_rt + awc(actix-web-client). async main(). Такой вопрос. Мне внутри main() надо цикл создвать? или оно там неявно в самом этом рантайме зацикливается? задача - простенький клиент который будет работать как демон
Если у тебя main уже async и все работает значит цикл уже неявно создан.

Обычно пишут

#[actix_rt::main]
async fn main() {

}

Тут макрос неявно вставляет этот цикл.
источник
2020 September 06

11

123 123 in Rust Async
Alex Ilizarov
Если у тебя main уже async и все работает значит цикл уже неявно создан.

Обычно пишут

#[actix_rt::main]
async fn main() {

}

Тут макрос неявно вставляет этот цикл.
Не, такого цикла нету. Исходя из доков actix_rt макрос создает отдельный поток и блочит его на исполнение футуры. Т.е код базовой футуры надо зацикливать, выходит, а там уже и дальше просто иерархия футур будет
источник