[][src]Struct fibers::ThreadPoolExecutor

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<dyn 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]

pub fn new() -> Result<Self>[src]

Creates a new instance of ThreadPoolExecutor.

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

pub fn with_thread_count(count: usize) -> Result<Self>[src]

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 Executor for ThreadPoolExecutor[src]

type Handle = ThreadPoolExecutorHandle

The handle type of the executor.

impl Spawn for ThreadPoolExecutor[src]

impl Debug for ThreadPoolExecutor[src]

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]