Estruturas de dados: Sua rápida introdução aos Buffers Circulares

>

>>

>

2 de Maio, 2019 – 4 min ler

>

>

>

>

>

>

>

>

>>

>>

>

>

>

Foto por James Thomas em Unsplash

Você já abriu seu computador e começou a digitar sua senha só para ver um grande atraso no que você está digitando? Esse atraso acontece quando o processador do computador acorda e percebe que precisa começar a pegar os dados do mini processador no teclado. Mas como esta informação é armazenada se há apenas um pequeno espaço na memória do teclado?

É aqui que entra o buffer circular.

O buffer circular é um certo tipo de fila. Agora, se você não está familiarizado com uma fila, você pode conhecê-la como uma linha. (Como quando você está esperando na fila para usar o banheiro.) Esta fila é uma estrutura FIFO (primeiro a entrar, primeiro a sair). Isso significa que a primeira pessoa a entrar numa fila é a primeira pessoa a sair. Então o que é diferente em uma fila circular?

Um buffer circular armazena os dados em um array de tamanho fixo. Então uma vez que o tamanho está definido e o buffer está cheio, o item mais antigo no buffer será empurrado para fora se mais dados forem adicionados. Ao armazenar dois ponteiros para a frente e para trás da estrutura, não há necessidade de manipular dinamicamente o array.

No entanto, se o buffer estiver cheio e você precisar adicionar algo novo, basta definir o item da lista apontado pelo ponteiro de trás para o novo item e incrementar o ponteiro de trás por um. A frente irá agora apontar para o item adicionado mais recentemente.

Esta técnica de alocação de memória tem benefícios quando você está trabalhando com um monte de dados em tempo real. Como mais dados são adicionados à estrutura, os dados antigos serão removidos para que nenhum dado precise ser deslocado. Como dito anteriormente, os ponteiros apenas mudam de posição.

Agora para voltar ao seu teclado e entrada de senha. Todas as suas teclas são mantidas em um buffer circular. Portanto, se você digitar rápido o suficiente, você potencialmente perderia parte da entrada recebida do teclado.

>

>

>

Um restaurante de buffer circular mal desenhado.
>

Para ajudar a imaginar o buffer circular, vamos construir um restaurante automático. Este restaurante tem uma única janela de recolha (a parte de trás do buffer) onde um cliente de cada vez pode recolher a sua refeição (os dados). Atrás da janela há uma mesa circular rotativa que contém 8 refeições (o buffer). Há também uma luz que aponta para a frente da mesa (ou para a frente do buffer). Cada vez que uma refeição é retirada da janela, a mesa gira no sentido horário um ponto.

Quando o chef termina de cozinhar uma refeição, ele a coloca um ponto na frente do local que está iluminado. A luz brilha então sobre o prato recém-colocado. Se o tampão estiver cheio e uma refeição estiver pronta para sair do fogão, a refeição na janela será despejada no lixo. A mesa irá rodar, e a nova refeição será colocada no local vazio.

Use Cases

Um instrutor me falou uma vez sobre uma empresa de tecnologia de realidade aumentada que usou um buffer circular para segurar os frames dos movimentos inseridos pelo usuário. Eles gravaram o movimento da mão e do corpo do usuário e o transmitiram para uma tela em tempo real. Se um usuário introduzisse muitos movimentos num curto período de tempo, os movimentos seriam armazenados.

Quando você rebobina alguns minutos de um filme ou programa de TV em streaming, esses frames anteriores foram armazenados num buffer circular para que possam ser acessados rapidamente. Se você rebobinar mais quadros do que os que estão armazenados no buffer, levará mais tempo para recarregar os quadros que você está procurando.

Em conclusão, se você precisar acessar rapidamente os dados de streaming que já foram observados ou usados, um buffer circular pode ser uma boa solução!

Deixe uma resposta

O seu endereço de email não será publicado.