Size: a a a

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

2020 August 23

Д

Дима in Rust — русскоговорящее сообществo
Mikail Bagishov
Думаю, надо null_mut()
+
источник

Э

Эрик in Rust — русскоговорящее сообществo
Дима
Всем привет. Кто-нибудь работал с WINAPI?

Пытаюсь код https://docs.microsoft.com/en-us/windows/win32/wnet/enumerating-network-resources перенести на Rust, проблема в строчке  
LPNETRESOURCE lpnr = NULL;
Пытаюсь заменить на let lpnr: LPNETRESOURCE = null;, а он не хочет, пишет

mismatched types [E0308] expected *mut NETRESOURCEW, found fn() -> *const <unknown>


чем можно заменить, чтобы работало?
null(); функцию надо вызвать, чтобы она родила нужный поинтер, а ты её саму пытаешься передать.
источник

b

in Rust — русскоговорящее сообществo
exstrim401
нужно именно при создании postgres::Client его сразу паковать в Arc<Mutex<
источник

Э

Эрик in Rust — русскоговорящее сообществo
Eugene
Mutex из tokio разве не для многопоточных?
Мутекс из токио не нужен (это даже в доках к этому мутексу указано).
источник

b

in Rust — русскоговорящее сообществo
std::sync::MutexGuard<'_, postgres::client::Client> cannot be sent between threads safely
within [closure@src/main.rs:61:27: 75:6 rx:crossbeam_channel::channel::Receiver<Site>, client:std::sync::MutexGuard<'_, postgres::client::Client>], the trait std::marker::Send is not implemented for std::sync::MutexGuard<'_, postgres::client::Client>
required because it appears within the type [closure@src/main.rs:61:27: 75:6 rx:crossbeam_channel::channel::Receiver<Site>, client:std::sync::MutexGuard<'_, postgres::client::Client>]
источник

E

Eugene in Rust — русскоговорящее сообществo
Эрик
Мутекс из токио не нужен (это даже в доках к этому мутексу указано).
почему?
источник

Э

Эрик in Rust — русскоговорящее сообществo
std::sync::MutexGuard<'_, postgres::client::Client> cannot be sent between threads safely
within [closure@src/main.rs:61:27: 75:6 rx:crossbeam_channel::channel::Receiver<Site>, client:std::sync::MutexGuard<'_, postgres::client::Client>], the trait std::marker::Send is not implemented for std::sync::MutexGuard<'_, postgres::client::Client>
required because it appears within the type [closure@src/main.rs:61:27: 75:6 rx:crossbeam_channel::channel::Receiver<Site>, client:std::sync::MutexGuard<'_, postgres::client::Client>]
Так и не пересылай лок между потоками.
источник

b

in Rust — русскоговорящее сообществo
так а если я хочу передавать postgres::Client каждому потоку чтобы он обновлял запись сам?
источник

Э

Эрик in Rust — русскоговорящее сообществo
так а если я хочу передавать postgres::Client каждому потоку чтобы он обновлял запись сам?
Arc<Mutex<Client>>
И перейди уже на асинхронщину, твои 100+ потоков ОСи убьют производительность не хуже плохого кода.
источник

E

Eugene in Rust — русскоговорящее сообществo
Эрик
Arc<Mutex<Client>>
И перейди уже на асинхронщину, твои 100+ потоков ОСи убьют производительность не хуже плохого кода.
если на async переходить, разве получится использовать тот Mutex, который из std ?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Есть smol для простых низкоуровневых задач и tokio с большой базой для всяких http клиентов (reqwest) и прочей мути.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Eugene
если на async переходить, разве получится использовать тот Mutex, который из std ?
Получится, прочитай доки к мутексу из токио, там всё ясно написано.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Просто заворачивать в нормальные атомарные функции надо.
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Эрик
Arc<Mutex<Client>>
И перейди уже на асинхронщину, твои 100+ потоков ОСи убьют производительность не хуже плохого кода.
Так вроде же нет никаких проблем в 100 потоках. И в 1000. На 10000 только хоть какие-то проблемы начинаются, и то с современным железом это число уже возможно стоит подвинуть к 100000 или 1000000
источник

Э

Эрик in Rust — русскоговорящее сообществo
Vlad Beskrovnyy
Так вроде же нет никаких проблем в 100 потоках. И в 1000. На 10000 только хоть какие-то проблемы начинаются, и то с современным железом это число уже возможно стоит подвинуть к 100000 или 1000000
А потом ты врубаешь кучу Tcp соединений с клиентами и у тебя кончаются Fd.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну и плюс размер стэка на каждый поток.
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Эрик
А потом ты врубаешь кучу Tcp соединений с клиентами и у тебя кончаются Fd.
Fd в асинхронщине тоже выделяются
Стэк в современных системах динамически выделяется (лениво постранично), так что займешь сколько нужно
источник

Э

Эрик in Rust — русскоговорящее сообществo
Vlad Beskrovnyy
Fd в асинхронщине тоже выделяются
Стэк в современных системах динамически выделяется (лениво постранично), так что займешь сколько нужно
Да, но не на каждую асинхронную таску же.
источник

VB

Vlad Beskrovnyy in Rust — русскоговорящее сообществo
Эрик
Да, но не на каждую асинхронную таску же.
Ровно столько же сколько в синхронном коде, ни больше ни меньше
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ладно, ладно. Не мне же этим потом пользоваться.
источник