【Rust日报】2021-04-09 tokio 计划发布基于 io-uring 的新运行时

tokio-uring - tokio 基于 io-uring 版的异步运行时

tokio 今天发布了新的 RFC,提出了新的支持 io-uring 异步运行时的计划。

Tokio目前的Linux实现使用非阻塞的系统调用和epoll进行事件通知。使用epoll,调整后的TCP代理将在用户态之外花费70%至80%的CPU周期,包括执行syscall和在内核和用户态之间复制数据的周期。2019年,Linux增加了一个新的API,即io-uring,它通过消除大多数syscall和提前映射用于字节缓冲区的内存区域来减少开销。比较io-uring与epoll的benchmark会发现提升还是很显著的;一个TCP echo客户端和服务器显示出高达60%的改进。虽然还没有测试过,但使用io-uring代替Tokio的线程池策略将会显著的改善 IO 操作。

由于io-uring与epoll有很大的不同,Tokio必须提供一套新的API来充分利用减少的开销。然而,Tokio的稳定性保证意味着Tokio API最早要到2024年才能改变。此外,io-uring API还在不断发展,计划在不久的将来推出新功能。与其等待io-uring的成熟和Tokio 2.0的发布,tokio 将发布一个独立的 crate,专门用于暴露io-uring的API。这个新的 crate 将能够在不违反 Tokio 稳定性保证的情况下,快速迭代突破性的变化。只部署在 Linux kernels 5.10 或更高版本上的应用程序,当充分利用 io-uring 的优势提供可衡量的好处时,可以选择使用这个 crate。预期的用例包括 TCP 代理、HTTP 文件服务器和数据库。

链接:https://github.com/tokio-rs/tokio-uring/pull/1

Rust 标准库的 trait 引导大全

Rust 标准库提供了大量的 Trait,每个 Trait 的功能是什么?怎样区分功能有点类似的 Trait 的使用场景?这篇博客非常详细的介绍了标准库中各种内置 Trait,非常值得阅读。

链接:https://github.com/pretzelhammer/rust-blog/blob/master/posts/tour-of-rusts-standard-library-traits.md

Starlark -- Facebook 用 Rust 重新实现了 Starlark 这门编程语言

Starlark 是 Google 开发的类似于 Python3 的一门编程语言,主要用在 Google 自己的构建工具 Bazel 和 Facebook 的构建工具 Buck 中。Starlark 目前有三种实现,一种是 Go,一种是 Java,另外一种就是现在这个项目,使用 Rust 实现。Rust 的初版是 Google 实现的,现在给了 Facebook。Rust 实现包括了完整的 parser,evaluator,linter 和 debugger。对编程语言感兴趣的朋友可以看看。

链接:https://developers.facebook.com/blog/post/2021/04/08/rust-starlark-library/

Github: https://github.com/facebookexperimental/starlark-rust

robusta - 一个方便生成 JNI 交互代码的库

有了他就可以避免写那些繁琐冗长的 Java JNI 函数名了!

例子:

use robusta_jni::bridge;
use robusta_jni::convert::Signature;

#[bridge]
mod jni {
    #[derive(Signature)]
    #[package(com.example.robusta)]
    struct HelloWorld;

    impl HelloWorld {
        pub extern "jni" fn special(mut input1: Vec<i32>, input2: i32) -> Vec<String> {
            input1.push(input2);
            input1.iter().map(ToString::to_string).collect()
        }
    }
}

package com.example.robusta;

import java.util.*;

class HelloWorld {
    private static native ArrayList<String> special(ArrayList<Integer> input1, int input2);

    static {
        System.loadLibrary("robusta_example");
    }

    public static void main(String[] args) {
        ArrayList<String> output = HelloWorld.special(new ArrayList<Integer>(List.of(1, 2, 3)), 4);
        System.out.println(output)
    }
}

链接:https://github.com/giovanniberti/robusta


From 日报小组 Folyd

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

Mac Rust io-uring是一种在Mac操作系统上使用Rust语言进行开发的io-uring库。 io-uring是Linux内核中的一个特性,它为应用程序提供了一种高性能、高效率的异步I/O操作方式。它通过使用事件驱动和无锁技术,实现了在高并发环境下进行文件操作的优化。io-uring提供了更低的系统开销和更高的吞吐量,特别适用于需要大量I/O操作的应用程序。 虽然io-uring最初是为Linux内核设计的,但由于其高性能的特性,一些开发者试图将其移植到其他操作系统上。其中,Mac Rust io-uring就是一个在Mac操作系统上使用Rust语言实现io-uring的库。 使用Mac Rust io-uring,开发者可以在Mac环境下利用io-uring的特性来提高文件操作的性能。这对于需要进行大量I/O操作的应用程序来说,是一个很有价值的工具。例如,对于数据库、Web服务器或文件传输等应用,通过使用Mac Rust io-uring,可以显著提高其性能和吞吐量。 Mac Rust io-uring不仅提供了对io-uring的封装,还提供了一些更高级别的功能和接口,以方便开发者使用。开发者可以使用Mac Rust io-uring来实现一些高级的文件操作,例如批量读取或写入文件,提高数据处理的效率。 总之,Mac Rust io-uring是一个在Mac操作系统上使用Rust语言开发的io-uring库,它能够为开发者提供高性能的异步I/O操作方式,从而提高应用程序的性能和吞吐量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值