use std::io;
use futures::{executor::ThreadPool, future::BoxFuture};
use rasi_syscall::{register_global_executor, Executor};
pub struct FuturesExecutor {
thread_pool: ThreadPool,
}
impl FuturesExecutor {
pub fn new(pool_size: usize) -> io::Result<Self> {
Ok(Self {
thread_pool: ThreadPool::builder().pool_size(pool_size).create()?,
})
}
}
impl Executor for FuturesExecutor {
fn spawn_boxed(&self, fut: BoxFuture<'static, ()>) {
self.thread_pool.spawn_ok(fut)
}
}
pub fn register_futures_executor_with_pool_size(pool_size: usize) -> io::Result<()> {
register_global_executor(FuturesExecutor::new(pool_size)?);
Ok(())
}
pub fn register_futures_executor() -> io::Result<()> {
register_futures_executor_with_pool_size(num_cpus::get_physical())
}