Size: a a a

2020 November 23

DF

Dollar Føølish in Rust Async
Отлично , спасибо
источник

AZ

Alexander Zaitsev in Rust Async
Kai Ren
И actix и actix-web работают на одном и том же actix-rt рантайме, который уже и работат вышеописанным тобой способом (n однопоточных tokio-рантаймов).

Любой актор спавнится на каком-то потоке, и после этого не уезжает за его пределы, а остаётся там же. В результате он может мутировать своё состояние без лишней синхронизации. Общение с этим актором через сообщения возможно из любого потока.
если спавнить акторы через run_in_tokio, то оно также продолжает спавнить N рантаймов?
источник

AZ

Alexander Zaitsev in Rust Async
ну и вдогонку вопрос - как можно регулировать, сколько именно actix заспавнит рантаймов
источник

KR

Kai Ren in Rust Async
Alexander Zaitsev
если спавнить акторы через run_in_tokio, то оно также продолжает спавнить N рантаймов?
Не приходилось юзать, но по идее да. Насколько я понимаю этот метод позволяет запускать рантайм актикса в указанном tokio. а не подкапотном.
источник

AZ

Alexander Zaitsev in Rust Async
Kai Ren
Не приходилось юзать, но по идее да. Насколько я понимаю этот метод позволяет запускать рантайм актикса в указанном tokio. а не подкапотном.
я просто не совсем понимаю, в каком именно момент и где происходит спавн рантаймов в актиксе
источник

KR

Kai Ren in Rust Async
Alexander Zaitsev
я просто не совсем понимаю, в каком именно момент и где происходит спавн рантаймов в актиксе
Есть actix::System. Он спавнит actix::Arbiter'ов, которые и менеджат каждый свой поток.

Вот из доков:
https://docs.rs/actix-rt/1.1.1/actix_rt/struct.Arbiter.html

Arbiters provide an asynchronous execution environment for actors, functions and futures. When an Arbiter is created, it spawns a new OS thread, and hosts an event loop. Some Arbiter functions execute on the current thread.
источник

KR

Kai Ren in Rust Async
Ток чегой-то я не могу сходу найти где там у них ограничение по потокам задаётся. Надо сорцы глянуть, сек.
источник

KR

Kai Ren in Rust Async
Ага, во. Там такой опции банально нет! Предполагается, что ты сам спавнишь сколько нужно тебе артитров. Арбитр со своим потоком создаётся по вызову Arbiter::new().

В actix-web есть надстройка в виде HttpServer, которые спавнит "такое-то кол-во воркеров", каждый из которых - суть арбитр. Потому там такая опция торчит.
источник

AZ

Alexander Zaitsev in Rust Async
Kai Ren
Ага, во. Там такой опции банально нет! Предполагается, что ты сам спавнишь сколько нужно тебе артитров. Арбитр со своим потоком создаётся по вызову Arbiter::new().

В actix-web есть надстройка в виде HttpServer, которые спавнит "такое-то кол-во воркеров", каждый из которых - суть арбитр. Потому там такая опция торчит.
а по умолчанию сколько спавнится?
источник

AZ

Alexander Zaitsev in Rust Async
ну то есть при вызове run_in_tokio вроде как создается actix::System. и вот сколько он создаёт арбитров?
источник

KR

Kai Ren in Rust Async
Alexander Zaitsev
а по умолчанию сколько спавнится?
https://docs.rs/actix-web/3.2.0/actix_web/struct.HttpServer.html#method.workers

By default http server uses number of available logical cpu as threads count.
источник

AZ

Alexander Zaitsev in Rust Async
не-не, я про сам actix
источник

AZ

Alexander Zaitsev in Rust Async
про actix-web  я знаю
источник

KR

Kai Ren in Rust Async
Alexander Zaitsev
ну то есть при вызове run_in_tokio вроде как создается actix::System. и вот сколько он создаёт арбитров?
Нисколько. Через run_in_tokio ты прокитываешь системе "ручку" от твоего токио, чтобы она создавала арбитров через неё. А потом уже, ты дальше вызываешь Arbiter::new() в коде, и оно спавнит его через это "ручку".
источник

AZ

Alexander Zaitsev in Rust Async
Kai Ren
Нисколько. Через run_in_tokio ты прокитываешь системе "ручку" от твоего токио, чтобы она создавала арбитров через неё. А потом уже, ты дальше вызываешь Arbiter::new() в коде, и оно спавнит его через это "ручку".
а если я не вызываю, то арбитров нет что ли?
источник

KR

Kai Ren in Rust Async
Ну да, ты тогда ничего по идее и не запускаешь, либо запускаешь на единственно арбитре самой системы.
источник

KR

Kai Ren in Rust Async
источник

AZ

Alexander Zaitsev in Rust Async
Kai Ren
Ну да, ты тогда ничего по идее и не запускаешь, либо запускаешь на единственно арбитре самой системы.
а, то есть у системы уже есть встроенный арбитр
источник

KR

Kai Ren in Rust Async
Alexander Zaitsev
а, то есть у системы уже есть встроенный арбитр
Да, в доках к нему референс как system arbiter идёт.
источник

AZ

Alexander Zaitsev in Rust Async
хм, значит пойду ковыряться, как там правильно настраивать актикс и спавнить нужное кол-во арбитров, чтобы акторы по ним разбрасывались
источник