标签: rust

13 篇文章

Rust 笔记 10:glibc ptmalloc2 Arena 碎片化
一、问题背景 某长期运行的 Rust 异步服务实例 RSS 达到 9GB,远超正常水位。该服务基于 Tokio 异步运行时,部署在容器环境中。 二、排查过程 2.1 代码层面梳理 通过代码审查,先梳理服务中可能占用较多内存的对象,包括: 全局缓存中的业务数据 文件映射型只读数据(大数据文件 mmap) 经分析这些都不足以解释 9GB RSS。文件映…
clap 笔记
1. ValueEnum 当我们需要使用自定义的枚举类型作为参数时,我们可以使用 clap::clap_derive::ValueEnum。 1.1 derive 方式 直接上例子: use clap::{clap_derive::ValueEnum, Parser}; #[derive(Debug, Clone, ValueEnum)] enum…
rust 笔记 10:axum 杂记
1. axum middleware axum crate 本身也有一些基础的 middleware 机制,在实现简单的逻辑时可以不用接入 tower。 1.1. 调用顺序 根据这篇文章的介绍,原生 axum middleware 的声明层级和调用顺序其实是反过来的,比较恶心。例如这么声明: use axum::{routing::get, Rou…
rust 笔记 9:cargo 杂记
1. 命令行运行特定单测 总有需要用命令行跑单测的场景,比如 vscode 上的 rust-analyzer 插件突然坏掉。。这个时候我们需要: cargo test --package my_project --bin test -- api::handler::test --show-output cargo test --package my…
rust 笔记 8:rust & tokio 杂记
1. 在 tokio::main 宏中指定 runtime 的线程个数 默认是多线程 runtime,worker 个数为 CPU 的核心数。可以通过在 tokio::main 中增加如下内容来制定 worker 个数: #[tokio::main(flavor = "multi_thread", worker_threads …
rust 笔记 7:新装机环境问题杂记
1. 换中科大镜像 rustup 安装方式不知从何时起被墙了 = = 换用国内镜像,加环境变量: export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-s…
rust 笔记 6:Notify vs oneshot::channel
1. 共性与区别 写异步 rust 时,我们经常需要一种一次性的通知手段,用于实现线程同步。tokio 提供了两种满足上述需求的同步工具:tokio::sync::oneshot::channel 和 tokio::sync::Notify。 二者主要有以下几点差距: 1.1. 单端与双端设计 对于 oneshot::channel ,自然地分为发…
rust 笔记 5:Pin 相关知识(极简总结版)
Pin 是一个结构 struct,Unpin 是一个特征 trait。 Pin 结构体的唯一成员是一个指针(例如引用和 Box)。它禁止外界获取指向数据的可变引用,从而保证指向的数据不被移动。 Unpin 代表数据可以被安全地移动,!Unpin 则反之。通常 !Unpin 的都是自引用类型。 可以通过引入一个 std::marker::Phanto…
pingora 笔记 1:连接池
1. 基本结构 入口类型 ConnectionPool 由一个 Hashmap pool 和一个 lru Lru 组成。 /// Connection pool /// /// [ConnectionPool] holds reusable connections. A reusable connection is released to this…
rust 笔记 4:彻底搞清楚各种字符串
1. String, &str 和 str 想要搞清楚这三者的差别,要从 str 开始说起。 1.1. str 和 &str str 是字符串切片(string slice),是对部分连续的 UTF8 字符序列的引用。 所有的切片类型,例如 str、[u8]、[i32] ,都是 Unsized 的(不定长类型,或称动态大小类型,Dy…