Struct fibers::ThreadPoolExecutor[][src]

pub struct ThreadPoolExecutor { /* fields omitted */ }

An executor that executes spawned fibers on pooled threads.

Examples

An example to calculate fibonacci numbers:

use fibers::{Spawn, Executor, ThreadPoolExecutor};
use futures::{Async, Future};

fn fib<H: Spawn + Clone>(n: usize, handle: H) -> Box<Future<Item=usize, Error=()> + Send> {
    if n < 2 {
        Box::new(futures::finished(n))
    } else {
        let f0 = handle.spawn_monitor(fib(n - 1, handle.clone()));
        let f1 = handle.spawn_monitor(fib(n - 2, handle.clone()));
        Box::new(f0.join(f1).map(|(a0, a1)| a0 + a1).map_err(|_| ()))
    }
}

let mut executor = ThreadPoolExecutor::new().unwrap();
let monitor = executor.spawn_monitor(fib(7, executor.handle()));
let answer = executor.run_fiber(monitor).unwrap();
assert_eq!(answer, Ok(13));

Methods

impl ThreadPoolExecutor
[src]

Creates a new instance of ThreadPoolExecutor.

This is equivalent to ThreadPoolExecutor::with_thread_count(num_cpus::get() * 2).

Creates a new instance of ThreadPoolExecutor with the specified size of thread pool.

Implementation Details

Note that current implementation is very naive and should be improved in future releases.

Internally, count threads are assigned to each of the scheduler (i.e., fibers::fiber::Scheduler) and the I/O poller (i.e., fibers::io::poll::Poller).

When spawn function is called, the executor will assign a scheduler (thread) for the fiber in simple round robin fashion.

If any of those threads are aborted, the executor will return an error as a result of run_once method call after that.

Trait Implementations

impl Debug for ThreadPoolExecutor
[src]

Formats the value using the given formatter. Read more

impl Executor for ThreadPoolExecutor
[src]

The handle type of the executor.

Returns the handle of the executor.

Runs one one unit of works.

Runs until the monitored fiber exits.

Runs until the future is ready.

Runs infinitely until an error happens.

impl Spawn for ThreadPoolExecutor
[src]

Spawns a fiber which will execute given boxed future.

Spawns a fiber which will execute given future.

Equivalent to self.spawn(futures::lazy(|| f())).

Spawns a fiber and returns a future to monitor it's execution result.

Spawns a linked fiber. Read more

Converts this instance into a boxed object.

Auto Trait Implementations