7 个版本
0.3.0-alpha.8 | 2019年7月29日 |
---|---|
0.3.0-alpha.7 | 2019年6月24日 |
0.3.0-alpha.6 | 2019年5月12日 |
0.3.0-alpha.5 | 2019年4月29日 |
0.3.0-alpha.1 | 2019年2月26日 |
#605 在 并发
每月495 次下载
在 2 个 crate 中使用 (通过 naja_async_runtime)
15KB
290 代码行
juliex - 最小化的 futures 执行器
juliex 是 Rust futures 的并发执行器。它实现为一个使用单个共享队列的线程池执行器。从算法上讲,它与 futures crate 提供的 Threadpool 执行器非常相似。主要区别在于,juliex 使用 crossbeam 通道并且为每个启动的未来执行单次分配,而 futures Threadpool 使用 std 并发原语和多次分配。
类似于 romio - 一个 IO 反应器 - juliex 目前不提供用户配置。它暴露了最简化的 API。
示例
#![feature(async_await)]
use std::io;
use futures::StreamExt;
use futures::executor;
use futures::io::AsyncReadExt;
use romio::{TcpListener, TcpStream};
fn main() -> io::Result<()> {
executor::block_on(async {
let mut listener = TcpListener::bind(&"127.0.0.1:7878".parse().unwrap())?;
let mut incoming = listener.incoming();
println!("Listening on 127.0.0.1:7878");
while let Some(stream) = incoming.next().await {
let stream = stream?;
let addr = stream.peer_addr()?;
juliex::spawn(async move {
println!("Accepting stream from: {}", addr);
echo_on(stream).await.unwrap();
println!("Closing stream from: {}", addr);
});
}
Ok(())
})
}
async fn echo_on(stream: TcpStream) -> io::Result<()> {
let (mut reader, mut writer) = stream.split();
reader.copy_into(&mut writer).await?;
Ok(())
}
安全性
此 crate 在原子访问周围内部使用 unsafe
。对此的约定是手动检查的。
许可
MIT OR Apache-2.0
依赖
~1.5MB
~24K SLoC