7 个版本

0.3.0-alpha.82019年7月29日
0.3.0-alpha.72019年6月24日
0.3.0-alpha.62019年5月12日
0.3.0-alpha.52019年4月29日
0.3.0-alpha.12019年2月26日

#605并发

Download history 109/week @ 2024-03-11 114/week @ 2024-03-18 99/week @ 2024-03-25 161/week @ 2024-04-01 88/week @ 2024-04-08 119/week @ 2024-04-15 121/week @ 2024-04-22 102/week @ 2024-04-29 111/week @ 2024-05-06 114/week @ 2024-05-13 104/week @ 2024-05-20 127/week @ 2024-05-27 108/week @ 2024-06-03 97/week @ 2024-06-10 132/week @ 2024-06-17 142/week @ 2024-06-24

每月495 次下载
2 个 crate 中使用 (通过 naja_async_runtime)

MIT/Apache

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