15 releases
0.3.4 | Oct 27, 2024 |
---|---|
0.3.3 | Mar 27, 2022 |
0.2.1 | Feb 25, 2022 |
0.1.7 | Jun 25, 2021 |
0.1.4 | Dec 29, 2020 |
#1387 in Asynchronous
73 downloads per month
Used in 10 crates
(7 directly)
90KB
999 lines
ARCHIVED ARCHIVED ARCHIVED
This crate is archived and will not be updated.
The code is now at
safina::executor
in the
safina
crate.
safina-executor
An async executor.
It is part of safina
, a safe async runtime.
Features
- Spawn async tasks to execute on a threadpool.
- Schedule closures or
FnOnce
to run on a separate thread pool for blocking jobs. - Supports multiple executors.
forbid(unsafe_code)
- Depends only on
std
- Good test coverage (100%)
Limitations
- Allocates memory
- Not optimized
Documentation
https://docs.rs/safina-executor
Examples
let executor = safina_executor::Executor::default();
let (sender, receiver) = std::sync::mpsc::channel();
executor.spawn(async move {
sender.send(()).unwrap();
});
receiver.recv().unwrap();
let result = safina_executor::block_on(async {
prepare_request().await?;
execute_request().await
})?;
let result = safina_executor::schedule_blocking(|| {
read_file1()?;
read_file2()
}).async_recv().await.unwrap()?;
Alternatives
async-executor
- Popular
- Dependencies have some
unsafe
code
futures-executor
- Very popular
- Full of
unsafe
tokio-executor
- Very popular
- Fast
- Internally complicated
- Full of
unsafe
executors
- Dependencies have lots of
unsafe
code
- Dependencies have lots of
bastion-executor
- Lots of
unsafe
code
- Lots of
rayon_core
- Generous amounts of
unsafe
code
- Generous amounts of
pollster
- Minimal
- Has a little
unsafe
code
lelet
- Automatically scales worker thread pool
- Lots of
unsafe
code
fibers
- Dependencies are full of unsafe
nostd_async
- Has some
unsafe
code
- Has some
embedded-executor
- Generous amounts of
unsafe
code
- Generous amounts of
spin_on
- Minimal
pasts
switchyard
- Lots of
unsafe
code
- Lots of
sealrs
rusty_pool
- Automatically adjusts thread pool
- Dependencies are full of unsafe
Changelog
- v0.3.3 - Eliminate spurious "resumed after completion" worker thread panics.
- v0.3.2 - Re-export
safina_sync::Receiver
andsafina_threadpool::NewThreadPoolError
. - v0.3.1 - Use
safina-async
v0.2.1. - v0.3.0 -
schedule_blocking
to return newsafina_sync::Receiver
. - v0.2.1 - Update docs.
- v0.2.0
Executor::new
andExecutor::with_name
to returnResult
.- Upgrade to
safina-threadpool
v0.2.0.
- v0.1.7 -
block_on
functions to take futures that are notSend
. - v0.1.6 - Fix deadlock in
block_on
andblock_on_unpin
when task is awakened a second time. - v0.1.5 - Support stable Rust! Needs 1.51+.
- v0.1.4 - Add
schedule_blocking
andExecutor::schedule_blocking
- v0.1.3
- Removed global executor. Users must explicitly create executor.
- Removed dependency on unstable
OnceCell
. - Uses
safina_threadpool
internally.
- v0.1.2 - Let callers pass futures to
spawn
andblock_on
without usingBox::pin
. Addspawn_unpin
andblock_on_unpin
for folks who need to avoid allocating. so callers don't have to. - v0.1.1 - Fix badge and update readme
- v0.1.0 - Renamed from
safina
TO DO
- Add a stress test
- Add a benchmark. See benchmarks in https://crates.io/crates/executors
- Add an
#[async_main]
macro - Look into using
flume
to eliminate the receiver mutex and reduce contention.
Release Process
- Edit
Cargo.toml
and bump version number. - Run
./release.sh