Rust工具集之arc-swap

Rust中常有配置读写的操作,一般可以用Arc<RwLock<T>>来实现,也可以用arc-swap来。有什么不同?

下面拿一个例子来说明下

假设有个配置,会有一个read thread不断获取配置,配置更新时要实时反映出来。

Read More

Rust设计模式:typestate

今天聊聊typestate模式。

新版oauth2-rs使用这个模式是想解决一个问题。

Oauth2中,一般需要提前配置好auth_url, token_url, introspect_url等,才能调用后续的鉴权相关功能。比如没有token_url配置好,你就无法成功拿授权码(code)获取token

但如果用户忘了配置,那就会在调用获取token时才得到运行时错误。

能不能在编译时就把错误暴露出来,让用户提前感知问题?

这就是typestate模式能很好解决的问题。

Read More

如何用Rust快速构建AWS Lambda Function

AWS Lambda Function是轻量级的计算服务。优势是按需付费,专注于功能,服务本身如何构建暴露都有AWS都不需要自己操心。

而按需付费基本就是服务使用时长和内存占用了,这个优化的话那妥妥的是Rust的拿手好戏, 所以现在有好多Serverless服务都用Rust构建的Lambda Function来搞。

今天简单看下如何用Rust快速构建Lambda Function(别担心没aws环境,往下看,有本地沙箱可尝试)

Read More

tokio之如何观测Rust异步任务的调度

我们知道Rust的异步是以task的调度来构建的。task作为抽象在语言层面的调度单元。

那如果想要观测其的调度执行有没有办法呢?。

有的!异步runtimetokio就有个tokio-console可以实现对异步调度的观测和分析,其对了解调度的机制和性能分析都很有帮助。

Read More

Rust异步编程之Future并发处理

上篇文章我们知道,RustFuture是异步执行,await时是阻塞在当前的异步任务task上,直到完成。

当多个异步任务执行时,如果只能都阻塞一个个执行,那就变成同步串行执行了,当然不是我们通常希望的并发处理方式,今天就来聊聊多个异步任务的一些并发处理方式。

Read More

Rust异步编程之Future初探

RustFuture是用来实现异步编程的。今天我们围绕其了解下Rust的异步编程是如何构建。

Rustasync就能轻松创建开销很小的可异步执行的函数,在await时其才会被调度执行。

其比较轻量级,有别于异步多线程,依托在操作系统线程之上,构建大量并发则需要大量的线程资源,对资源的消耗比较大。

比如下边用async构建异步任务:

1
2
3
4
5
6
7
8
async fn async_fn() {
// handle async logic
}

#[tokio::main]
async fn main() {
async_fn().await
}

Read More