< 返回版块

LacneQin 发表于 2019-10-15 21:53

Tags:rust

RxRust v0.3更新发布

在v0.2我们实现了所有运算符和可视线程的安全性之后,RxRust现在可以通过调度程序跨线程传递任务。这样,所有用户提供的闭包都必须满足Send + Sync + 'static,甚至永远不需要使用调度程序和多线程。

现在,我们移除了bounds的SyncSend'static,并添加了新的特性IntoShared。这样可以为本地线程实现运算符,并实现IntoShared将其转换为线程安全的运算符。默认情况下,RxRust始终使用单线程版本以获得最佳性能,如果需要在线程中传递IntoShared对象,则使用RxRust 将本地对象转换为线程安全的对象。

更新前:

let res = Arc::new(Mutex(0));
let c_res = res.clone();
observable::of(100).subscribe(|v| { *res.lock().unwrap() = *v });

assert_eq!(*res.lock().unwrap(), 100);

更新后:

let mut res = 0;
observable::of!(100).subscribe(|v| { res = *v });

assert_eq!(res, 100);

重要变化 移除 RxFnRxValue

  • operators: 移除 Multicast

  • observable: 移除 ObservableOnce

  • observable: observable::from_vecobservable::from_range 函数整合到 宏observable::from_iter! .

  • observable: observable::empty函数变为宏observable::empty! .

  • observable: observable::of 函数变为宏 observable::of! .

  • observable: observable::from_future函数变为宏 observable::from_future!

  • observable: observable::from_future_with_err 函数变为宏observable::from_future_with_err!

  • observable: observable::interval 函数变为宏observable::interval!

详细信息前往GitHub查看

Watt:由wasm支持的proc宏(概念验证),编译时间几乎为零

  • 编译速度更快。 提前将宏编译为Wasm,可以节省该宏的所有下游用户的时间,他们不必自己编译宏逻辑或其依赖项。

  • 隔离性。 Watt是100%安全的代码,具有零依赖性。在此环境中代码运行时,宏与外部世界的唯一可能的交互限于话费token和生成token。不管宏本身可能包含多少不安全代码!由于Rust编译器或标准库中存在模块错误,因此宏除了随机播放令牌外不可能做任何其他事情。

  • 确定性。 从系统构建的角度来看,由Wasm支持的宏具有以下优点:可以将其视为从输入到输出的纯粹确定性函数。隐式依赖(例如通过文件系统)是不存在的,构建系统对隐式依赖不可见或不考虑隐式依赖。

详细信息前往GitHub查看

使Tokio调度程序快10倍的方法

调度程序的作用是调度工作。一个应用程序被分解为多个工作单元,我们将它们称为任务。当任务可以进展时,它是可运行的;而在外部资源上被阻塞时,该任务将不可可运行(或空闲)。任务是独立的,因为任何数量的可运行任务都可以同时执行。调度程序负责在运行状态下执行任务,直到它们过渡回空闲状态为止。执行任务意味着需要为任务分配CPU时间(一种全局资源)。

有许多不同的建模调度程序的方法,每种方法各有利弊。

Tokio的第一个工作窃取调度程序于2018年三月问世,这是基于许多前者不正确的假设的首次尝试。

有关Tokio的更多信息前往官方博客查看


From 日报小组 @Lance

日报订阅地址:

独立日报订阅地址:

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页