RxRust v0.3更新发布
在v0.2我们实现了所有运算符和可视线程的安全性之后,RxRust现在可以通过调度程序跨线程传递任务。这样,所有用户提供的闭包都必须满足Send + Sync + 'static
,甚至永远不需要使用调度程序和多线程。
现在,我们移除了bounds的Sync
,Send
和'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);
重要变化
移除 RxFn
和 RxValue
-
operators: 移除
Multicast
-
observable: 移除
ObservableOnce
-
observable:
observable::from_vec
和observable::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
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅:
评论区
写评论还没有评论