【Rust日报】2023-12-18 在Rust中桥接异步和同步代码

在Rust中桥接异步和同步代码

本文总结了作者团队遇到了在同步上下文中调用异步Rust代码的问题,并通过解决这个问题深入了解了异步Rust。

问题出现在必须在实现了来自第三方crate定义的trait的同步代码中执行一些异步代码时。由于trait定义是同步的且无法修改,出现了问题。为了解决这个问题,尝试使用Tokio运行时的Runtime::block_on方法,但遇到了无法在运行时中启动另一个运行时的错误。后来发现了futures::executor::block_on,虽然编译通过,但运行时卡住了,而在tokio::main中则正常完成。

通过分析Rust异步代码的生成器实现,发现问题出在futures::executor::block_on内部没有执行异步任务的问题。解决方法是使用另一个运行时(RUNTIME)来执行异步代码。在最佳实践中,建议避免将可能导致阻塞的同步代码与异步代码混合使用。在从同步上下文调用异步代码时,使用futures::executor::block_on并将异步代码作为任务在专用运行时中执行。如果必须在异步上下文中调用阻塞的同步代码,建议使用tokio::task::spawn_blocking在专用执行器上执行该代码。

这些经验教训希望对在Rust中有效桥接异步和同步代码的开发者有所帮助。

原文链接 https://dev.to/greptime/bridging-async-and-sync-rust-code-a-lesson-learned-while-working-with-tokio-5cl9

oculante: 快速便捷实用的图像查看器

Oculante是一款支持硬件加速的图像查看器,其愿景是成为一款快速、实用、便携的图像查看器,支持广泛的图像格式,提供图像分析和基本编辑工具。

主要特点包括:

  • 免费、无臃肿、无广告、尊重隐私的开源应用程序

  • 图像快速打开,启动迅速

  • 可在Windows、Mac、Linux和NetBSD平台上使用

  • 支持多种图像和SVG格式

  • 通过缓存实现图像快速重新加载

  • 能够正确显示未关联通道(如果图像使用alpha和颜色通道以特殊方式编码数据)

  • 允许选择像素,显示位置和颜色值

  • 提供基本的非破坏性编辑功能:裁剪、调整大小、绘图、对比度、HSV、旋转、模糊、噪声等

  • 使用SIMD加速进行图像编辑

github地址 https://github.com/woelper/oculante/#oculante

--

From 日报小组 BobQ, FBI小白

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

你可能感兴趣的:(rust,开发语言,后端)