【Rust日报】如何实现一个简单但高效的异步 "oneshot" 通道

科技   2024-12-01 13:45   加拿大  

sled 发布v0.2.0

Sled是一个控制空间光效果的库。这个版本发布说明总结了sled 0.2.0版本的主要变更内容:

  1. 为支持no_std系统的错误处理,最低支持Rust版本提升到1.81。

  2. 移除了之前已废弃的Scheduler.change_hz()方法,改用Scheduler.set_hz()。

  3. 移除了Sled::new_from_string(String)和Config::from_string(String),改用Sled::new_from_str(&str)和Config::from_str(&str)。

  4. 增加了对大部分no_std环境的支持,引入了CustomDriver和CustomScheduler等特性。

  5. 增加了libm特性标记以支持需要libm的no_std环境。

https://github.com/DavJCosby/sled/releases/tag/0.2.0

ESP32-C3 Embassy 开发示例

这是一个关于在 ESP32-C3 上使用 Embassy 的示例。作者在 GitHub 上提供了一个通用示例,演示了如何使用异步编程来与 I²C 传感器、SPI E-Ink 显示器和 WiFi 时间服务器进行通信。该示例采用 no_std 和无 ESP-IDF 的方式,使用了最新的箱库版本(除了 reqwless)。作者对现有示例感到失望,尤其是因为 esp-hal 及相关库interface在每个版本中都会发生变化,导致示例代码很快就过时了。该作品旨在提供一个更加稳定和现代化的 ESP32-C3 编程示例。

使用Rust开发嵌入式的同学可参考。

https://old.reddit.com/u/claudiomattera

如何实现一个简单但高效的异步 "oneshot" 通道

这篇文章介绍了如何实现一个简单但高效的异步 "oneshot" 通道。oneshot 通道是一种只能发送和接收一个值的通道,常见于异步请求-响应系统中。文章解释了为什么需要 oneshot 通道,描述了其应满足的要求,并逐步实现了一个真实的、无依赖的 async oneshot 通道库。

文章阐述了 oneshot 通道需要满足的几个主要要求:

  1. 可靠地发送至多一个值
  2. 接收至多一个值
  3. 如果所有发送端句柄被丢弃,告知接收端值永远不会到达
  4. 接收值的操作应该是异步非阻塞的

接着文章提供了一个初步的实现思路,并解释了为什么需要使用原子操作和条件变量等同步原语。最后,作者逐步优化了实现,提高了性能,并发布到了 crates.io 上供大家使用。

https://amit.prasad.me/blog/async-oneshot

--

From 日报小组 Mike

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss
  • 微信公众号:Rust语言中文社区


Rust语言中文社区
Rust官方及社区最新信息搜集、文章推送,教程学习,技巧分享,社区交流。信息来源是整个全球Rust社区。
 最新文章