Rust技术干货分享
文章平均质量分 90
达坦科技DatenLord
这个作者很懒,什么都没留下…
展开
-
如何优雅地组织Rust项目中的异步代码?
在这篇文章中,我将首先列出我在编写async Rust代码时的一些痛点。然后,我将指出我们真正需要异步代码的场景,并讨论为什么我们应该把异步和非异步代码分开。最后,我将展示我是如何在最近的一次Curp重构中实践这一原则的。原创 2023-04-21 17:16:43 · 169 阅读 · 0 评论 -
Rust中一些K/V存储引擎
本周我们翻译一篇Reddit上有关用Rust语言编写的一些关键值存储引擎的文章,让大家一窥目前比较热门的KV Store都有哪些~原创 2023-02-24 14:39:43 · 569 阅读 · 1 评论 -
Rust 语言的全链路追踪库 tracing
在一个应用程序或库的开发过程中,除了其本身的逻辑以外,开发人员还需要做很多额外的工作,以保证编写的代码可以正确的运行,或者在出错时可以快速定位到错误的位置以及原因,这就需要引入一些额外的工具,trace 就是其中特别好用的一种,下文我将会简单介绍 trace,并以 Rust 为例,演示 trace 在 Rust 中的使用方法。原创 2022-12-23 13:54:32 · 1669 阅读 · 0 评论 -
Rust原子类型和内存排序
原子类型在构建无锁数据结构,跨线程共享数据,线程间同步等多线程并发编程场景中起到至关重要的作用。本文将从Rust提供的原子类型和原子类型的内存排序问题两方面来介绍。原创 2022-10-28 13:41:21 · 708 阅读 · 0 评论 -
DatenLord|Rust程序性能分析
本文主要介绍如何用profiling工具对Rust程序进行On-CPU和Off-CPU的性能分析,以及如何绘制火焰图对结果测试进行可视化处理。原创 2022-09-03 11:52:30 · 448 阅读 · 0 评论 -
Linux 全新异步接口 io_uring 的 Rust 生态盘点
io_uring 无可置疑是近两年内核圈最火的话题之一,作为风头正劲的 Linux 异步 I/O 接口,其野心更大,不仅仅想将 Linux 的 I/O 操作全面异步化,还希望将所有Linux系统调用异步化。原创 2022-08-20 18:06:12 · 413 阅读 · 0 评论 -
DatenLord|Understanding Functor in Rust
代码】DatenLord|UnderstandingFunctorinRust。原创 2022-07-22 11:55:12 · 110 阅读 · 0 评论 -
DatenLord|Rust for Linux 要来了,这对我们意味着什么
原因就在于商业化的操作系统是需要应用场景的,某一个应用场景在相当长的时间内都会主流流行一个或几个操作系统,不轻易改变,比如桌面操作系统中的Windows和MacOS,手机操作系统中的Android和iOS,以及服务器操作系统Linux,BSD和WindowsServer等。这个问题可以从两方面回答。随着这些主流应用场景的不断拓展,Rust会被越来越多人使用,相应的Rust语言的生态也会越来越好,最终降低Rust语言的使用难度,吸引更多人来使用Rust,这是一个正向循环。......原创 2022-07-18 10:55:31 · 316 阅读 · 0 评论 -
DatenLord|io_uring Rust 异步库实现方法
作者 | 施继成 后期编辑 | 张汉东转自《Rust Magazine中文精选》io_uring 是 Linux 最新的异步 I/O 接口,采用两个用户和内核共享的 ring buffer 进行交互,性能优于之前的接口且限制更少。虽然 io_uring 仍然处于开发迭代中,但是基本的 I/O 接口已经基本定型,作为高效系统语言的 Rust 则成为使用该接口的不二之选。现在已经有许多针对 io_uring 的 Rust 封装,但是有的存在soundness问题,有的存在性能问题,都不是安全高效 I/O 的好选原创 2022-07-13 19:40:38 · 161 阅读 · 0 评论 -
DatenLord|Rust语言无锁数据结构的内存管理
作者 | 施继成 转自《Rust Magazine中文精选》正如大家所熟知的,无锁数据结构在并发访问中往往具有更好的访问效率和并发度。无锁数据结构的性能优势主要来自于以下两点:1. 数据结构的锁设计往往比较粗粒度,在很多可以并发访问的情况下,访问者被锁阻塞,无法实现并发访问。2. 无锁数据结构访问不需要进行上下文切换,有锁数据结构在并发度高的时候往往会触发操作系统上下文切换。但是无锁数据结构也带来了新的问题,即内存管理问题。举个例子:当线程 A 读取一块数据的时候,线程 B 要释放该数据块。在有锁数据结构中原创 2022-07-11 17:00:28 · 212 阅读 · 0 评论 -
Datenlord | Rust 无锁编程之Crossbeam Epoch算法解析
作者 | 施继成 转自《Rust Magazine中文精选》上次的文章介绍了无锁数据结构的内存管理机制 EBR,该机制相较于其他的内存管理机制具有更高的执行效率。然而由于理念的复杂性,EBR 的实现并不容易,为每一个无锁数据结构从头实现 EBR 也无必要,因此很自然得大家会考虑将 EBR 的核心理念 epoch 抽取出来变成库,让大家能够复用。Crossbeam-epoch 是一套成熟的被大家广泛使用的 EBR 库,本文将从实现原理部分进行较为详细的解析,并且在此过程中进行。如前文所述,大家一般在和Cros原创 2022-07-11 18:09:51 · 286 阅读 · 0 评论 -
DatenLord|Rust实现K8S调度扩展
K8S调度器(kube-scheduler)是K8S调度pod的控制器,它作为K8S核心组件运行。调度器基于一定的调度策略为pod找到合适的运行节点。K8S调度器调度一个pod时候主要分为三个阶段1. 过滤阶段:调用一系列predicate函数或者叫filter函数过滤掉不合适的节点,比如说某些节点上不满足pod声明的运行所需要的资源,如CPU,内存等资源,那么这些节点会在这个阶段被过滤.........原创 2022-07-11 16:59:18 · 306 阅读 · 0 评论 -
DatenLord|重新思考Rust Async如何实现高性能IO
长期以来,计算机系统IO的速度一直没能跟上CPU速度的提升,相比而言IO往往成为系统的性能瓶颈,计算任务等待IO存取数据,成为高性能系统的一大性能瓶颈。本文先剖析IO性能瓶颈的根源,然后举例说明如何解决IO瓶颈,最后简要介绍我们在高性能IO方面的尝试。目录IO性能瓶颈如何实现高性能IO我们的尝试当用户程序执行IO操作时,绝大多数情况下是调用操作系统内核提供的系统调用来执行IO操作,最常见的IO系统调用是read和write。.........原创 2022-07-10 11:00:54 · 245 阅读 · 0 评论