当前位置:首页 > 科技  > 软件

Rust中的高吞吐量流处理

来源: 责编: 时间:2023-08-05 11:44:33 5722观看
导读作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序。最后,作者介绍了如何通过测量空闲和阻塞时

作者 | NozKGp28资讯网——每日最新资讯28at.com

编译 | 王瑞平KGp28资讯网——每日最新资讯28at.com

本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序。KGp28资讯网——每日最新资讯28at.com

最后,作者介绍了如何通过测量空闲和阻塞时间来优化流处理程序的性能,并将这些内容同步至Twitter和blog。KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

此外,作者还提供了一些其它方面的优化建议,例如:KGp28资讯网——每日最新资讯28at.com

  • 在实际系统中,应考虑将线程固定至CPU内核上或使用一种版本的绿色线程减少上下文切换。
  • 在处理流时,通常需要为结果分配内存。内存分配是昂贵的,所以,在以后的文章中,作者将会介绍一些优化内存分配的好方法。

首先,分别介绍下在同步和异步Rust中的流特质。KGp28资讯网——每日最新资讯28at.com

一、同步和异步Rust中的流特质

在同步Rust中,流核心抽象是Iterator。它提供了在序列中产生项的方法并在它们之间进行阻塞,然后,通过将迭代器传递给其它迭代器的构造函数完成组合。这使我们可以毫不费力地将事物连接在一起。KGp28资讯网——每日最新资讯28at.com

在异步Rust中,流核心抽象是Stream。它的行为与Iterator非常相似;但是,它并不是在每个项之间产生的阻塞,而是允许其它任务在阻塞等待时运行。KGp28资讯网——每日最新资讯28at.com

在异步Rust与同步Rust中,Read和Write分别对应AsyncRead和AsyncWrite。这些特质表明:未解析的字节通常直接来自10层(例如,来自套接字或文件)。KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

Rust流吸收了其它语言所具备的最佳功能;例如,它们能通过利用Rust特质系统回避Node.js的Duplex流中出现的遗留问题,也能同时实施背压和惰性迭代,大大提升了效率。最重要的是,Rust流允许使用相同类型的异步迭代。KGp28资讯网——每日最新资讯28at.com

未来,关于Rust流还有很多值得关注之处,尽管仍有一些问题亟待解决。KGp28资讯网——每日最新资讯28at.com

二、总体概括:什么是流处理?

现在,也许你已经了解到了同步和异步Rust中的流特质,下面再来介绍下什么是“流处理”。KGp28资讯网——每日最新资讯28at.com

“流处理”是一种重要的大数据处理手段,其主要特点是处理的数据是源源不断且实时到来的。KGp28资讯网——每日最新资讯28at.com

在不同规模的科技公司中,流处理通常被用于分析和处理具体事件,且常被应用于分布式系统。KGp28资讯网——每日最新资讯28at.com

有些领域确实会大量使用“流处理”手段,包括:视频处理和高频交易。我们也能够借此寻找到新型区块链之中的架构灵感。因为,区块链需要处理交易和元数据流等。KGp28资讯网——每日最新资讯28at.com

如今,你可以租用具有100多个CPU的内核、100GB内存、多个GPU和100Gbps带宽的AWS实例,还无需拥有一个节点的分布式系统。KGp28资讯网——每日最新资讯28at.com

现在,让我们了解下流处理在Rust编程中的应用:KGp28资讯网——每日最新资讯28at.com

三、举个例子:计算10亿个数字的哈希程序

现在,让我们写一个用来计算10亿个数字的SHA512和BLAKE3哈希程序吧!你可以想象:数字代表交易、分析事件或价格信号。散列法可用来表示对这些输入的任意转换。KGp28资讯网——每日最新资讯28at.com

如下是单线程解决方案程序:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

当我在带有专用CPU和16核的Digital Ocean上用发布模式运行此程序时,只需6分钟多一点。KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

1.通道

现在,让我们用“流处理”来重写这个程序。与在单个循环中执行散列不同,我们将设置一个线程管道并行执行散列,然后收集结果。KGp28资讯网——每日最新资讯28at.com

在两个线程之间发送数据的本地流被称为通道。我们的新程序将生成四个线程。生成器线程将生成数字并同时将它们发送至两个不同的哈希线程。散列线程将读取这些数字,分别对它们进行散列,然后将它们的输出发送给结果线程,下图是它的架构:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

我们也将使用标准库中的mpsc通道发送和接收数据。mpsc可用来表示“多生产者-单消费者”,代表你可以从多个线程向通道发送数据,但是,只有一个管道能够输出数据。虽然我们不会使用这个多制作人功能,但是了解这一点很重要。KGp28资讯网——每日最新资讯28at.com

它仍是一个相当简单的程序:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

输出结果如下:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

哦!带通道的新版本花费了两倍时间,这是怎么了?KGp28资讯网——每日最新资讯28at.com

2.环形缓冲器

你可以用火焰图进行测试,但还是省省时间吧!KGp28资讯网——每日最新资讯28at.com

无论多小,所有通道库的构建都会产生额外的费用,并行化所带来的好处必须大于此种开销,才能保证系统正常运作。这种情况下的瓶颈是通道send()和recv()。由于Rust中的标准库mpsc通道相对缓慢,但仍有其它替代方案,比如,crossbeam-channel。KGp28资讯网——每日最新资讯28at.com

为此,我们分析了4个不同的通道库,结果如下:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

显然,ringbuf和rtrb速度最快。因为它们的环形缓冲区无锁,扮演着“单个生产者-单个消费者”的角色。单个生产者意味着只有一个管道将数据放入队列,另一个管道将负责数据输出,这比“多生产者队列”开销小。KGp28资讯网——每日最新资讯28at.com

此外,这些程序库也是非阻塞式的。当队列已满时,如果尝试推送,它将提示“error”而不是“block”,“空队列”亦是如此。KGp28资讯网——每日最新资讯28at.com

为使用这些环形缓冲区库,我添加了自旋锁,以便在通道阻塞时继续重试。事实证明,这也是高频交易架构中所使用的方法。KGp28资讯网——每日最新资讯28at.com

我还发现,在等待时增加非常短的“休眠”时间整体性能就能提高。这可能是由于当核心使用率达到100%或高于某些温度时,启动CPU就会发生节流的现象。KGp28资讯网——每日最新资讯28at.com

如下是新的pop()和push(value)帮助器:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

我们将用新方法展示:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

速度确实比以前快了,但也快不了多少,现在,就让我们把并行化提升至另一个层次。KGp28资讯网——每日最新资讯28at.com

3.更多的并行化

目前,我们为哈希创建了两个线程,一个用于SHA512,另一个用于BLAKE3。两者中较慢的那个将成为我们技术发展的瓶颈。为证明这一点,我重新运行了原始的单线程示例,仅使用SHA512哈希,结果如下:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

这与并行哈希示例中的性能非常接近,意味着,总体上花在哈希上的大部分时间都是由SHA512产生。KGp28资讯网——每日最新资讯28at.com

那么,如果我们同时创建更多的线程并将多个数字进行散列排列呢?让我们试一试。我们将创建2个SHA512哈希线程和2个BLAKE3哈希线程来启动。KGp28资讯网——每日最新资讯28at.com

4.可视化

每个线程都拥有自己的输入和输出队列。我们将用循环顺序将生成的数字循环发送至每个线程并用相同的顺序读取结果。KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

这确保了流的顺序能够在结果线程中维持不变;如果排序不重要或消息处理时间多变,那么,其它的调度机制可能会更好。KGp28资讯网——每日最新资讯28at.com

如下是循环调度代码:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

新的代码更复杂,部分如下:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

一起来看看,现在表现如何?输出结果如下:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

确实好多了!KGp28资讯网——每日最新资讯28at.com

5.测量“闲置”和“阻塞”时间

每个哈希函数应该有多少个线程?在更复杂的系统中,这很难确定,甚至可能是动态的。KGp28资讯网——每日最新资讯28at.com

实际上,有一种技术对“流处理”很有帮助,即,在某个时间窗口内测量空闲和阻塞时间。KGp28资讯网——每日最新资讯28at.com

  • 空闲时间

等待空队列接收消息所花的时间KGp28资讯网——每日最新资讯28at.com

  • 全程时间

等待满队列发送输出所花费的时间KGp28资讯网——每日最新资讯28at.com

空闲时间是pop()期间旋转的时间,阻塞时间是push()期间旋转的时间。我修改了这两个函数,用来跟踪花费时间。这段代码使用了开销很小的单元:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

我还创建了一个新的线程统计这些时间,输出结果如下:KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

我们可以看到,sha512线程既没有“空闲”也没有“阻塞”,而是100%处于活跃状态;此外,我们还能通过增加sha512线程数量为系统提速。KGp28资讯网——每日最新资讯28at.com

注:当用测量系统的行为改变其性能时,可能会出现像“海森伯测不准原理”这样的问题。如果遇到此种情况,请查看“粗时间库”;通常,定时测量取近似值就足够了。KGp28资讯网——每日最新资讯28at.com

我们在Digital Ocean实例中,经过试验和错误数据总结出:最佳数量是8个SHA512线程和4个BLAKE3线程。KGp28资讯网——每日最新资讯28at.com

图片图片KGp28资讯网——每日最新资讯28at.com

结果:小于初始时间的1/6。KGp28资讯网——每日最新资讯28at.com

四、下一步:为不同的流处理结果分配内存

在这篇文章中,我们用具体实例介绍了Rust中流处理的概念、方法和优化,但是还有很多细节没有讨论。在实际系统中,我们应该考虑将“线程”固定到CPU内核上,用来减少上下文切换。KGp28资讯网——每日最新资讯28at.com

此外,在流处理时,你通常需要为不同的结果分配内存。这是昂贵的,所以,在今后的文章中,我们还将讨论这方面的一些策略。KGp28资讯网——每日最新资讯28at.com

参考资料:

1.https://noz.ai/hash-pipeline/KGp28资讯网——每日最新资讯28at.com

2.https://zhuanlan.zhihu.com/p/70247995?utm_id=0KGp28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-78-0.htmlRust中的高吞吐量流处理

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 线程通讯的三种方法!通俗易懂

下一篇: 摸鱼心法第一章——和配置文件说拜拜

标签:
  • 热门焦点
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现“美团直播”的固定入口。在直播聚合页面,外卖“神枪手”直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top