pub enum Generic {
Thread(Thread),
Process(Process),
ProcessBinary(ProcessAllocator),
ZeroCopy(TcpAllocator<Process>),
}
Expand description
Enumerates known implementors of Allocate
.
Passes trait method calls on to members.
Variants§
Thread(Thread)
Intra-thread allocator.
Process(Process)
Inter-thread, intra-process allocator.
ProcessBinary(ProcessAllocator)
Inter-thread, intra-process serializing allocator.
ZeroCopy(TcpAllocator<Process>)
Inter-process allocator.
Implementations§
Source§impl Generic
impl Generic
Sourcepub fn index(&self) -> usize
pub fn index(&self) -> usize
The index of the worker out of (0..self.peers())
.
Examples found in repository?
examples/comm_hello.rs (line 12)
6fn main() {
7
8 // extract the configuration from user-supplied arguments, initialize the computation.
9 let config = timely_communication::Config::from_args(std::env::args()).unwrap();
10 let guards = timely_communication::initialize(config, |mut allocator| {
11
12 println!("worker {} of {} started", allocator.index(), allocator.peers());
13
14 // allocates a pair of senders list and one receiver.
15 let (mut senders, mut receiver) = allocator.allocate(0);
16
17 // send typed data along each channel
18 for i in 0 .. allocator.peers() {
19 senders[i].send(Message::from_typed(format!("hello, {}", i)));
20 senders[i].done();
21 }
22
23 // no support for termination notification,
24 // we have to count down ourselves.
25 let mut received = 0;
26 while received < allocator.peers() {
27
28 allocator.receive();
29
30 if let Some(message) = receiver.recv() {
31 println!("worker {}: received: <{}>", allocator.index(), message.deref());
32 received += 1;
33 }
34
35 allocator.release();
36 }
37
38 allocator.index()
39 });
40
41 // computation runs until guards are joined or dropped.
42 if let Ok(guards) = guards {
43 for guard in guards.join() {
44 println!("result: {:?}", guard);
45 }
46 }
47 else { println!("error in computation"); }
48}
Sourcepub fn peers(&self) -> usize
pub fn peers(&self) -> usize
The number of workers.
Examples found in repository?
examples/comm_hello.rs (line 12)
6fn main() {
7
8 // extract the configuration from user-supplied arguments, initialize the computation.
9 let config = timely_communication::Config::from_args(std::env::args()).unwrap();
10 let guards = timely_communication::initialize(config, |mut allocator| {
11
12 println!("worker {} of {} started", allocator.index(), allocator.peers());
13
14 // allocates a pair of senders list and one receiver.
15 let (mut senders, mut receiver) = allocator.allocate(0);
16
17 // send typed data along each channel
18 for i in 0 .. allocator.peers() {
19 senders[i].send(Message::from_typed(format!("hello, {}", i)));
20 senders[i].done();
21 }
22
23 // no support for termination notification,
24 // we have to count down ourselves.
25 let mut received = 0;
26 while received < allocator.peers() {
27
28 allocator.receive();
29
30 if let Some(message) = receiver.recv() {
31 println!("worker {}: received: <{}>", allocator.index(), message.deref());
32 received += 1;
33 }
34
35 allocator.release();
36 }
37
38 allocator.index()
39 });
40
41 // computation runs until guards are joined or dropped.
42 if let Ok(guards) = guards {
43 for guard in guards.join() {
44 println!("result: {:?}", guard);
45 }
46 }
47 else { println!("error in computation"); }
48}
Sourcepub fn release(&mut self)
pub fn release(&mut self)
Perform work after scheduling operators.
Examples found in repository?
examples/comm_hello.rs (line 35)
6fn main() {
7
8 // extract the configuration from user-supplied arguments, initialize the computation.
9 let config = timely_communication::Config::from_args(std::env::args()).unwrap();
10 let guards = timely_communication::initialize(config, |mut allocator| {
11
12 println!("worker {} of {} started", allocator.index(), allocator.peers());
13
14 // allocates a pair of senders list and one receiver.
15 let (mut senders, mut receiver) = allocator.allocate(0);
16
17 // send typed data along each channel
18 for i in 0 .. allocator.peers() {
19 senders[i].send(Message::from_typed(format!("hello, {}", i)));
20 senders[i].done();
21 }
22
23 // no support for termination notification,
24 // we have to count down ourselves.
25 let mut received = 0;
26 while received < allocator.peers() {
27
28 allocator.receive();
29
30 if let Some(message) = receiver.recv() {
31 println!("worker {}: received: <{}>", allocator.index(), message.deref());
32 received += 1;
33 }
34
35 allocator.release();
36 }
37
38 allocator.index()
39 });
40
41 // computation runs until guards are joined or dropped.
42 if let Ok(guards) = guards {
43 for guard in guards.join() {
44 println!("result: {:?}", guard);
45 }
46 }
47 else { println!("error in computation"); }
48}
Trait Implementations§
Source§impl Allocate for Generic
impl Allocate for Generic
Source§fn allocate<T: Data>(
&mut self,
identifier: usize,
) -> (Vec<Box<dyn Push<Message<T>>>>, Box<dyn Pull<Message<T>>>)
fn allocate<T: Data>( &mut self, identifier: usize, ) -> (Vec<Box<dyn Push<Message<T>>>>, Box<dyn Pull<Message<T>>>)
Constructs several send endpoints and one receive endpoint.
Source§fn events(&self) -> &Rc<RefCell<VecDeque<(usize, Event)>>>
fn events(&self) -> &Rc<RefCell<VecDeque<(usize, Event)>>>
A shared queue of communication events with channel identifier. Read more
Source§fn pipeline<T: 'static>(
&mut self,
identifier: usize,
) -> (ThreadPusher<Message<T>>, ThreadPuller<Message<T>>)
fn pipeline<T: 'static>( &mut self, identifier: usize, ) -> (ThreadPusher<Message<T>>, ThreadPuller<Message<T>>)
Constructs a pipeline channel from the worker to itself. Read more
Auto Trait Implementations§
impl Freeze for Generic
impl !RefUnwindSafe for Generic
impl !Send for Generic
impl !Sync for Generic
impl Unpin for Generic
impl !UnwindSafe for Generic
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