亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是ringbuffer

發布時間:2021-10-20 16:32:35 來源:億速云 閱讀:320 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關什么是ringbuffer,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

什么是ringbuffer

什么是ringbuffer

嗯,正如名字所說的一樣,它是一個環(首尾相接的環),你可以把它用做在不同上下文(線程、協程)間傳遞數據的buffer。

基本來說,ringbuffer擁有一個固定長度,且每個位置有一個序號,并且是連續的。

隨著你不停地填充這個buffer(可能也會有相應的讀取),這個序號會一直增長,直到繞過這個環。

一般,ringbuffer都是由數組實現,而由于其在內存上的連續性,因此性能得到了極高的提升。

從數組上看,是這樣的,不再是環形。

什么是ringbuffer

一般定義的數據結構

type RingBuffer struct{
	buffer []interface{}
	read	uint64  //讀的位置
	write	uint64  //寫的位置
	size	 uint64  //緩沖區大小
}

幾大概念:

read == write 時,緩沖區為空

(write + 1) % size == read, 緩沖區滿了

幾大困難點

繞回

ringbuffer看上去是一個環,但是實際上是一個數組,寫入到數組尾部之后需要繞回到數組首部。但是由于數據包的大小是不定大小,所以到了尾部可能會出現數據分割,包一半在尾部一半在開頭,對應的讀取的時候數據包一半在尾部,一半在開頭需要把它們合并起來。

寫入過快,釋放覆蓋

當寫入速度大于讀取速度時,新寫入數據會與未讀數據發生覆蓋,這樣就有兩種決策:覆蓋未讀數據和丟棄新寫入數據。

避免重復讀取

由于ringbuffer是通過覆蓋寫入數據,并不會刪除未讀數據,所以就通過ringbuffer中的read來判斷是否還有未讀數據。

重讀/重寫的需求

假設一個消費場景,消費是耗時的,只有當消費者確認了,這個對象已經被消費掉了,才能被釋放掉資源。這時候就需要重讀/重寫

優點

我們使用 Ring Buffer 這種數據結構,是因為它給我們提供了可靠的消息傳遞特性。

這個理由就足夠了,不過它還有一些其他的優點。

首先,Ring Buffer 比鏈表要快,因為它是數組,而且有一個容易預測的訪問模式。

CPU 高速緩存友好 (CPU-cache-friendly)-數據可以在硬件層面預加載到高速緩存,因此 CPU 不需要經常回到主內存 RAM 里去尋找 Ring Buffer 的下一條數據。

Ring Buffer 是一個數組,你可以預先分配內存,并保持數組元素永遠有效。這意味著內存垃圾收集(GC)在這種情況下幾乎什么也不用做。此外,也不像鏈表那樣每增加一條數據都要創建對象-當這些數據從鏈表里刪除時,這些對象都要被清理掉。

以上就是什么是ringbuffer,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節
推薦閱讀:
  1. 什么是PHP
  2. 什么是python

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丽水市| 蓬莱市| 延庆县| 济宁市| 太仆寺旗| 囊谦县| 塘沽区| 连南| 南乐县| 彩票| 博白县| 辽阳县| 平安县| 樟树市| 峨边| 宁国市| 哈密市| 辉南县| 贵港市| 隆德县| 衡水市| 庆安县| 天祝| 卢湾区| 仁寿县| 南部县| 牟定县| 赫章县| 靖边县| 隆昌县| 祁东县| 灵宝市| 阳高县| 文山县| 栖霞市| 积石山| 松阳县| 曲麻莱县| 双柏县| 平江县| 湾仔区|