pub struct System { /* private fields */ }
Expand description
A manager for a per-thread distributed async runtime.
Implementations§
source§impl System
impl System
sourcepub fn new() -> SystemRunner
pub fn new() -> SystemRunner
Examples found in repository?
examples/ring.rs (line 59)
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
fn main() -> io::Result<()> {
let sys = System::new();
let (n_nodes, n_rounds) = parse_args();
let now = SystemTime::now();
sys.block_on(async {
println!("Setting up {} nodes", n_nodes);
let limit = n_nodes * n_rounds;
let node = Node::create(move |ctx| {
let first_addr = ctx.address();
let mut prev_addr = Node {
id: 1,
limit,
next: first_addr.recipient(),
}
.start();
for id in 2..n_nodes {
prev_addr = Node {
id,
limit,
next: prev_addr.recipient(),
}
.start();
}
Node {
id: n_nodes,
limit,
next: prev_addr.recipient(),
}
});
println!(
"Sending start message and waiting for termination after {} messages...",
limit
);
node.send(Payload(1)).await.unwrap();
});
sys.run().unwrap();
match now.elapsed() {
Ok(elapsed) => println!(
"Time taken: {}.{:06} seconds ({} msg/second)",
elapsed.as_secs(),
elapsed.subsec_micros(),
(n_nodes * n_rounds * 1000000) as u128 / elapsed.as_micros()
),
Err(e) => println!("An error occurred: {:?}", e),
}
Ok(())
}
sourcepub fn with_tokio_rt<F>(runtime_factory: F) -> SystemRunner
pub fn with_tokio_rt<F>(runtime_factory: F) -> SystemRunner
Create a new System using the Tokio Runtime returned from a closure.
source§impl System
impl System
sourcepub fn current() -> System
pub fn current() -> System
Examples found in repository?
examples/ring.rs (line 38)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
fn handle(&mut self, msg: Payload, _: &mut Context<Self>) {
if msg.0 >= self.limit {
println!(
"Actor {} reached limit of {} (payload was {})",
self.id, self.limit, msg.0
);
System::current().stop();
return;
}
// Some prime in order for different actors to report progress.
// Large enough to print about once per second in debug mode.
if msg.0 % 498989 == 1 {
println!(
"Actor {} received message {} of {} ({:.2}%)",
self.id,
msg.0,
self.limit,
100.0 * msg.0 as f32 / self.limit as f32
);
}
self.next.do_send(Payload(msg.0 + 1));
}
sourcepub fn try_current() -> Option<System>
pub fn try_current() -> Option<System>
Try to get current running system.
Returns None
if no System has been started.
Unlike current
, this never panics.
sourcepub fn arbiter(&self) -> &ArbiterHandle
pub fn arbiter(&self) -> &ArbiterHandle
Get handle to a the System’s initial Arbiter.
sourcepub fn is_registered() -> bool
pub fn is_registered() -> bool
Check if there is a System registered on the current thread.
sourcepub fn stop(&self)
pub fn stop(&self)
Stop the system (with code 0).
Examples found in repository?
examples/ring.rs (line 38)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
fn handle(&mut self, msg: Payload, _: &mut Context<Self>) {
if msg.0 >= self.limit {
println!(
"Actor {} reached limit of {} (payload was {})",
self.id, self.limit, msg.0
);
System::current().stop();
return;
}
// Some prime in order for different actors to report progress.
// Large enough to print about once per second in debug mode.
if msg.0 % 498989 == 1 {
println!(
"Actor {} received message {} of {} ({:.2}%)",
self.id,
msg.0,
self.limit,
100.0 * msg.0 as f32 / self.limit as f32
);
}
self.next.do_send(Payload(msg.0 + 1));
}
sourcepub fn stop_with_code(&self, code: i32)
pub fn stop_with_code(&self, code: i32)
Stop the system with a given exit code.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for System
impl Send for System
impl Sync for System
impl Unpin for System
impl !UnwindSafe for System
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more