[−][src]Struct fibers::executor::ThreadPoolExecutor
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.
fn handle(&self) -> Self::Handle
[src]
fn run_once(&mut self) -> Result<()>
[src]
fn run_fiber<T, E>(
&mut self,
monitor: Monitor<T, E>
) -> Result<Result<T, MonitorError<E>>>
[src]
&mut self,
monitor: Monitor<T, E>
) -> Result<Result<T, MonitorError<E>>>
fn run_future<F: Future>(
&mut self,
future: F
) -> Result<Result<F::Item, F::Error>>
[src]
&mut self,
future: F
) -> Result<Result<F::Item, F::Error>>
fn run(self) -> Result<()>
[src]
impl Spawn for ThreadPoolExecutor
[src]
fn spawn_boxed(&self, fiber: Box<dyn Future<Item = (), Error = ()> + Send>)
[src]
fn spawn<F>(&self, fiber: F) where
F: Future<Item = (), Error = ()> + Send + 'static,
[src]
F: Future<Item = (), Error = ()> + Send + 'static,
fn spawn_fn<F, T>(&self, f: F) where
F: FnOnce() -> T + Send + 'static,
T: IntoFuture<Item = (), Error = ()> + Send + 'static,
T::Future: Send,
[src]
F: FnOnce() -> T + Send + 'static,
T: IntoFuture<Item = (), Error = ()> + Send + 'static,
T::Future: Send,
fn spawn_monitor<F, T, E>(&self, f: F) -> Monitor<T, E> where
F: Future<Item = T, Error = E> + Send + 'static,
T: Send + 'static,
E: Send + 'static,
[src]
F: Future<Item = T, Error = E> + Send + 'static,
T: Send + 'static,
E: Send + 'static,
fn spawn_link<F, T, E>(&self, f: F) -> Link<(), (), T, E> where
F: Future<Item = T, Error = E> + Send + 'static,
T: Send + 'static,
E: Send + 'static,
[src]
F: Future<Item = T, Error = E> + Send + 'static,
T: Send + 'static,
E: Send + 'static,
fn boxed(self) -> BoxSpawn where
Self: Sized + Send + 'static,
[src]
Self: Sized + Send + 'static,
impl Debug for ThreadPoolExecutor
[src]
Auto Trait Implementations
impl Send for ThreadPoolExecutor
impl !Sync for ThreadPoolExecutor
impl Unpin for ThreadPoolExecutor
impl !UnwindSafe for ThreadPoolExecutor
impl !RefUnwindSafe for ThreadPoolExecutor
Blanket Implementations
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,