AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Rust中的高吞吐量流處理

來(lái)源: 責(zé)編: 時(shí)間:2023-08-05 11:44:33 4967觀看
導(dǎo)讀作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫(kù),還使用這些庫(kù)實(shí)現(xiàn)了一個(gè)流處理程序。最后,作者介紹了如何通過(guò)測(cè)量空閑和阻塞時(shí)

作者 | NozvGu28資訊網(wǎng)——每日最新資訊28at.com

編譯 | 王瑞平vGu28資訊網(wǎng)——每日最新資訊28at.com

本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫(kù),還使用這些庫(kù)實(shí)現(xiàn)了一個(gè)流處理程序。vGu28資訊網(wǎng)——每日最新資訊28at.com

最后,作者介紹了如何通過(guò)測(cè)量空閑和阻塞時(shí)間來(lái)優(yōu)化流處理程序的性能,并將這些內(nèi)容同步至Twitter和blog。vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

此外,作者還提供了一些其它方面的優(yōu)化建議,例如:vGu28資訊網(wǎng)——每日最新資訊28at.com

  • 在實(shí)際系統(tǒng)中,應(yīng)考慮將線程固定至CPU內(nèi)核上或使用一種版本的綠色線程減少上下文切換。
  • 在處理流時(shí),通常需要為結(jié)果分配內(nèi)存。內(nèi)存分配是昂貴的,所以,在以后的文章中,作者將會(huì)介紹一些優(yōu)化內(nèi)存分配的好方法。

首先,分別介紹下在同步和異步Rust中的流特質(zhì)。vGu28資訊網(wǎng)——每日最新資訊28at.com

一、同步和異步Rust中的流特質(zhì)

在同步Rust中,流核心抽象是Iterator。它提供了在序列中產(chǎn)生項(xiàng)的方法并在它們之間進(jìn)行阻塞,然后,通過(guò)將迭代器傳遞給其它迭代器的構(gòu)造函數(shù)完成組合。這使我們可以毫不費(fèi)力地將事物連接在一起。vGu28資訊網(wǎng)——每日最新資訊28at.com

在異步Rust中,流核心抽象是Stream。它的行為與Iterator非常相似;但是,它并不是在每個(gè)項(xiàng)之間產(chǎn)生的阻塞,而是允許其它任務(wù)在阻塞等待時(shí)運(yùn)行。vGu28資訊網(wǎng)——每日最新資訊28at.com

在異步Rust與同步Rust中,Read和Write分別對(duì)應(yīng)AsyncRead和AsyncWrite。這些特質(zhì)表明:未解析的字節(jié)通常直接來(lái)自10層(例如,來(lái)自套接字或文件)。vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

Rust流吸收了其它語(yǔ)言所具備的最佳功能;例如,它們能通過(guò)利用Rust特質(zhì)系統(tǒng)回避Node.js的Duplex流中出現(xiàn)的遺留問(wèn)題,也能同時(shí)實(shí)施背壓和惰性迭代,大大提升了效率。最重要的是,Rust流允許使用相同類型的異步迭代。vGu28資訊網(wǎng)——每日最新資訊28at.com

未來(lái),關(guān)于Rust流還有很多值得關(guān)注之處,盡管仍有一些問(wèn)題亟待解決。vGu28資訊網(wǎng)——每日最新資訊28at.com

二、總體概括:什么是流處理?

現(xiàn)在,也許你已經(jīng)了解到了同步和異步Rust中的流特質(zhì),下面再來(lái)介紹下什么是“流處理”。vGu28資訊網(wǎng)——每日最新資訊28at.com

“流處理”是一種重要的大數(shù)據(jù)處理手段,其主要特點(diǎn)是處理的數(shù)據(jù)是源源不斷且實(shí)時(shí)到來(lái)的。vGu28資訊網(wǎng)——每日最新資訊28at.com

在不同規(guī)模的科技公司中,流處理通常被用于分析和處理具體事件,且常被應(yīng)用于分布式系統(tǒng)。vGu28資訊網(wǎng)——每日最新資訊28at.com

有些領(lǐng)域確實(shí)會(huì)大量使用“流處理”手段,包括:視頻處理和高頻交易。我們也能夠借此尋找到新型區(qū)塊鏈之中的架構(gòu)靈感。因?yàn)椋瑓^(qū)塊鏈需要處理交易和元數(shù)據(jù)流等。vGu28資訊網(wǎng)——每日最新資訊28at.com

如今,你可以租用具有100多個(gè)CPU的內(nèi)核、100GB內(nèi)存、多個(gè)GPU和100Gbps帶寬的AWS實(shí)例,還無(wú)需擁有一個(gè)節(jié)點(diǎn)的分布式系統(tǒng)。vGu28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在,讓我們了解下流處理在Rust編程中的應(yīng)用:vGu28資訊網(wǎng)——每日最新資訊28at.com

三、舉個(gè)例子:計(jì)算10億個(gè)數(shù)字的哈希程序

現(xiàn)在,讓我們寫(xiě)一個(gè)用來(lái)計(jì)算10億個(gè)數(shù)字的SHA512和BLAKE3哈希程序吧!你可以想象:數(shù)字代表交易、分析事件或價(jià)格信號(hào)。散列法可用來(lái)表示對(duì)這些輸入的任意轉(zhuǎn)換。vGu28資訊網(wǎng)——每日最新資訊28at.com

如下是單線程解決方案程序:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)我在帶有專用CPU和16核的Digital Ocean上用發(fā)布模式運(yùn)行此程序時(shí),只需6分鐘多一點(diǎn)。vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

1.通道

現(xiàn)在,讓我們用“流處理”來(lái)重寫(xiě)這個(gè)程序。與在單個(gè)循環(huán)中執(zhí)行散列不同,我們將設(shè)置一個(gè)線程管道并行執(zhí)行散列,然后收集結(jié)果。vGu28資訊網(wǎng)——每日最新資訊28at.com

在兩個(gè)線程之間發(fā)送數(shù)據(jù)的本地流被稱為通道。我們的新程序?qū)⑸伤膫€(gè)線程。生成器線程將生成數(shù)字并同時(shí)將它們發(fā)送至兩個(gè)不同的哈希線程。散列線程將讀取這些數(shù)字,分別對(duì)它們進(jìn)行散列,然后將它們的輸出發(fā)送給結(jié)果線程,下圖是它的架構(gòu):vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

我們也將使用標(biāo)準(zhǔn)庫(kù)中的mpsc通道發(fā)送和接收數(shù)據(jù)。mpsc可用來(lái)表示“多生產(chǎn)者-單消費(fèi)者”,代表你可以從多個(gè)線程向通道發(fā)送數(shù)據(jù),但是,只有一個(gè)管道能夠輸出數(shù)據(jù)。雖然我們不會(huì)使用這個(gè)多制作人功能,但是了解這一點(diǎn)很重要。vGu28資訊網(wǎng)——每日最新資訊28at.com

它仍是一個(gè)相當(dāng)簡(jiǎn)單的程序:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

輸出結(jié)果如下:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

哦!帶通道的新版本花費(fèi)了兩倍時(shí)間,這是怎么了?vGu28資訊網(wǎng)——每日最新資訊28at.com

2.環(huán)形緩沖器

你可以用火焰圖進(jìn)行測(cè)試,但還是省省時(shí)間吧!vGu28資訊網(wǎng)——每日最新資訊28at.com

無(wú)論多小,所有通道庫(kù)的構(gòu)建都會(huì)產(chǎn)生額外的費(fèi)用,并行化所帶來(lái)的好處必須大于此種開(kāi)銷,才能保證系統(tǒng)正常運(yùn)作。這種情況下的瓶頸是通道send()和recv()。由于Rust中的標(biāo)準(zhǔn)庫(kù)mpsc通道相對(duì)緩慢,但仍有其它替代方案,比如,crossbeam-channel。vGu28資訊網(wǎng)——每日最新資訊28at.com

為此,我們分析了4個(gè)不同的通道庫(kù),結(jié)果如下:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

顯然,ringbuf和rtrb速度最快。因?yàn)樗鼈兊沫h(huán)形緩沖區(qū)無(wú)鎖,扮演著“單個(gè)生產(chǎn)者-單個(gè)消費(fèi)者”的角色。單個(gè)生產(chǎn)者意味著只有一個(gè)管道將數(shù)據(jù)放入隊(duì)列,另一個(gè)管道將負(fù)責(zé)數(shù)據(jù)輸出,這比“多生產(chǎn)者隊(duì)列”開(kāi)銷小。vGu28資訊網(wǎng)——每日最新資訊28at.com

此外,這些程序庫(kù)也是非阻塞式的。當(dāng)隊(duì)列已滿時(shí),如果嘗試推送,它將提示“error”而不是“block”,“空隊(duì)列”亦是如此。vGu28資訊網(wǎng)——每日最新資訊28at.com

為使用這些環(huán)形緩沖區(qū)庫(kù),我添加了自旋鎖,以便在通道阻塞時(shí)繼續(xù)重試。事實(shí)證明,這也是高頻交易架構(gòu)中所使用的方法。vGu28資訊網(wǎng)——每日最新資訊28at.com

我還發(fā)現(xiàn),在等待時(shí)增加非常短的“休眠”時(shí)間整體性能就能提高。這可能是由于當(dāng)核心使用率達(dá)到100%或高于某些溫度時(shí),啟動(dòng)CPU就會(huì)發(fā)生節(jié)流的現(xiàn)象。vGu28資訊網(wǎng)——每日最新資訊28at.com

如下是新的pop()和push(value)幫助器:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

我們將用新方法展示:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

速度確實(shí)比以前快了,但也快不了多少,現(xiàn)在,就讓我們把并行化提升至另一個(gè)層次。vGu28資訊網(wǎng)——每日最新資訊28at.com

3.更多的并行化

目前,我們?yōu)楣?chuàng)建了兩個(gè)線程,一個(gè)用于SHA512,另一個(gè)用于BLAKE3。兩者中較慢的那個(gè)將成為我們技術(shù)發(fā)展的瓶頸。為證明這一點(diǎn),我重新運(yùn)行了原始的單線程示例,僅使用SHA512哈希,結(jié)果如下:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

這與并行哈希示例中的性能非常接近,意味著,總體上花在哈希上的大部分時(shí)間都是由SHA512產(chǎn)生。vGu28資訊網(wǎng)——每日最新資訊28at.com

那么,如果我們同時(shí)創(chuàng)建更多的線程并將多個(gè)數(shù)字進(jìn)行散列排列呢?讓我們?cè)囈辉嚒N覀儗?chuàng)建2個(gè)SHA512哈希線程和2個(gè)BLAKE3哈希線程來(lái)啟動(dòng)。vGu28資訊網(wǎng)——每日最新資訊28at.com

4.可視化

每個(gè)線程都擁有自己的輸入和輸出隊(duì)列。我們將用循環(huán)順序?qū)⑸傻臄?shù)字循環(huán)發(fā)送至每個(gè)線程并用相同的順序讀取結(jié)果。vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

這確保了流的順序能夠在結(jié)果線程中維持不變;如果排序不重要或消息處理時(shí)間多變,那么,其它的調(diào)度機(jī)制可能會(huì)更好。vGu28資訊網(wǎng)——每日最新資訊28at.com

如下是循環(huán)調(diào)度代碼:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

新的代碼更復(fù)雜,部分如下:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

一起來(lái)看看,現(xiàn)在表現(xiàn)如何?輸出結(jié)果如下:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

確實(shí)好多了!vGu28資訊網(wǎng)——每日最新資訊28at.com

5.測(cè)量“閑置”和“阻塞”時(shí)間

每個(gè)哈希函數(shù)應(yīng)該有多少個(gè)線程?在更復(fù)雜的系統(tǒng)中,這很難確定,甚至可能是動(dòng)態(tài)的。vGu28資訊網(wǎng)——每日最新資訊28at.com

實(shí)際上,有一種技術(shù)對(duì)“流處理”很有幫助,即,在某個(gè)時(shí)間窗口內(nèi)測(cè)量空閑和阻塞時(shí)間。vGu28資訊網(wǎng)——每日最新資訊28at.com

  • 空閑時(shí)間

等待空隊(duì)列接收消息所花的時(shí)間vGu28資訊網(wǎng)——每日最新資訊28at.com

  • 全程時(shí)間

等待滿隊(duì)列發(fā)送輸出所花費(fèi)的時(shí)間vGu28資訊網(wǎng)——每日最新資訊28at.com

空閑時(shí)間是pop()期間旋轉(zhuǎn)的時(shí)間,阻塞時(shí)間是push()期間旋轉(zhuǎn)的時(shí)間。我修改了這兩個(gè)函數(shù),用來(lái)跟蹤花費(fèi)時(shí)間。這段代碼使用了開(kāi)銷很小的單元:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

我還創(chuàng)建了一個(gè)新的線程統(tǒng)計(jì)這些時(shí)間,輸出結(jié)果如下:vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

我們可以看到,sha512線程既沒(méi)有“空閑”也沒(méi)有“阻塞”,而是100%處于活躍狀態(tài);此外,我們還能通過(guò)增加sha512線程數(shù)量為系統(tǒng)提速。vGu28資訊網(wǎng)——每日最新資訊28at.com

注:當(dāng)用測(cè)量系統(tǒng)的行為改變其性能時(shí),可能會(huì)出現(xiàn)像“海森伯測(cè)不準(zhǔn)原理”這樣的問(wèn)題。如果遇到此種情況,請(qǐng)查看“粗時(shí)間庫(kù)”;通常,定時(shí)測(cè)量取近似值就足夠了。vGu28資訊網(wǎng)——每日最新資訊28at.com

我們?cè)贒igital Ocean實(shí)例中,經(jīng)過(guò)試驗(yàn)和錯(cuò)誤數(shù)據(jù)總結(jié)出:最佳數(shù)量是8個(gè)SHA512線程和4個(gè)BLAKE3線程。vGu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vGu28資訊網(wǎng)——每日最新資訊28at.com

結(jié)果:小于初始時(shí)間的1/6。vGu28資訊網(wǎng)——每日最新資訊28at.com

四、下一步:為不同的流處理結(jié)果分配內(nèi)存

在這篇文章中,我們用具體實(shí)例介紹了Rust中流處理的概念、方法和優(yōu)化,但是還有很多細(xì)節(jié)沒(méi)有討論。在實(shí)際系統(tǒng)中,我們應(yīng)該考慮將“線程”固定到CPU內(nèi)核上,用來(lái)減少上下文切換。vGu28資訊網(wǎng)——每日最新資訊28at.com

此外,在流處理時(shí),你通常需要為不同的結(jié)果分配內(nèi)存。這是昂貴的,所以,在今后的文章中,我們還將討論這方面的一些策略。vGu28資訊網(wǎng)——每日最新資訊28at.com

參考資料:

1.https://noz.ai/hash-pipeline/vGu28資訊網(wǎng)——每日最新資訊28at.com

2.https://zhuanlan.zhihu.com/p/70247995?utm_id=0vGu28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-78-0.htmlRust中的高吞吐量流處理

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 線程通訊的三種方法!通俗易懂

下一篇: 摸魚(yú)心法第一章——和配置文件說(shuō)拜拜

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 7月安卓手機(jī)性價(jià)比榜:努比亞+紅魔兩款新機(jī)入榜

    7月登場(chǎng)的新機(jī)有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產(chǎn)品,而且努比亞和紅魔也一貫有著不錯(cuò)的性價(jià)比,所以在本次的性價(jià)比榜單
  • 7月安卓手機(jī)性能榜:紅魔8S Pro再奪榜首

    7月份的手機(jī)市場(chǎng)風(fēng)平浪靜,除了紅魔和努比亞帶來(lái)了兩款搭載驍龍8Gen2領(lǐng)先版處理器的新機(jī)之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機(jī)廠商修整的時(shí)間,進(jìn)入8月份之
  • 學(xué)習(xí)JavaScript的10個(gè)理由...

    作者 | Simplilearn編譯 | 王瑞平當(dāng)你決心學(xué)習(xí)一門(mén)語(yǔ)言的時(shí)候,很難選擇到底應(yīng)該學(xué)習(xí)哪一門(mén),常用的語(yǔ)言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 一文掌握 Golang 模糊測(cè)試(Fuzz Testing)

    模糊測(cè)試(Fuzz Testing)模糊測(cè)試(Fuzz Testing)是通過(guò)向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來(lái)發(fā)現(xiàn)軟件漏洞的方法。可以用來(lái)發(fā)現(xiàn)應(yīng)用程序、操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議等中的漏洞或
  • 從零到英雄:高并發(fā)與性能優(yōu)化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構(gòu)師或者程序員,你是否曾經(jīng)為公司的系統(tǒng)在面對(duì)高并發(fā)和性能瓶頸時(shí)感到手足無(wú)措或者焦頭爛額呢?筆者在出道那會(huì)為此是吃盡了苦頭的,不過(guò)也得
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對(duì)象、數(shù)組等,只要不斷地創(chuàng)建這些對(duì)象,并且保證 GC Roots 到對(duì)象之間有可達(dá)路徑來(lái)避免垃 圾收集回收機(jī)制清除這些對(duì)象,當(dāng)這些對(duì)象所占空間超過(guò)
  • 華為Mate60系列模具曝光:采用碩大圓形后置相機(jī)模組+拼接配色方案

    據(jù)此前多方爆料,今年華為將開(kāi)始恢復(fù)一年雙旗艦戰(zhàn)略,除上半年推出的P60系列外,往年下半年的Mate系列也將迎來(lái)更新,有望在9-10月份帶來(lái)全新的華為Mate60
  • 7月4日見(jiàn)!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級(jí)旗艦都已悉數(shù)亮相,而下半年即將推出的頂級(jí)旗艦已經(jīng)成為了數(shù)碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國(guó)時(shí)間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top