Concurrent Deterministic Skiplist and Other Data Structures

Este artigo apresenta o projeto, análise e desempenho de uma lista de saltos determinística concorrente em nós NUMA de muitos núcleos, avaliando também filas e tabelas hash concorrentes em comparação com a biblioteca TBB da Intel, enquanto propõe estratégias de gerenciamento de memória e uso hierárquico de estruturas de dados para reduzir latências e acessos remotos.

Aparna Sasidharan

Publicado 2026-03-06
📖 5 min de leitura🧠 Leitura aprofundada

Each language version is independently generated for its own context, not a direct translation.

Imagine que você está organizando uma biblioteca gigante em um prédio com muitos andares (os "núcleos" do processador). O objetivo é que qualquer pessoa (os "fios" ou threads) possa pegar ou devolver um livro (dados) instantaneamente, sem que ninguém fique empurrando o outro na porta.

Este artigo é como um manual de engenharia para construir essa biblioteca de forma super rápida e organizada em computadores modernos e poderosos. A autora, Aparna Sasidharan, testou três tipos de "organizadores de livros" diferentes em um supercomputador chamado Delta.

Vamos simplificar os três protagonistas desta história:

1. A Escada Mágica (Skiplist Determinístico)

Geralmente, quando você procura um livro em uma lista gigante, tem que ler um por um até achar. Isso é lento.

  • O Problema: As "Escadas Mágicas" (Skiplists) tradicionais usam um truque de sorte (números aleatórios) para criar atalhos. Às vezes, a sorte é boa e você pula 100 livros de uma vez; às vezes, é ruim e você pula só um. Isso é imprevisível.
  • A Solução da Autora: Ela criou uma Escada Mágica Perfeita. Em vez de depender da sorte, ela constrói os degraus de forma matemática e previsível (chamada de árvore 1-2-3-4).
  • A Analogia: Imagine que em vez de subir escadas aleatórias, você tem um prédio onde cada andar tem exatamente o número certo de escadas para que você nunca precise subir mais de 3 degraus de uma vez, não importa quantos livros existam.
  • O Desafio: Fazer isso funcionar ao mesmo tempo para 100 pessoas (concorrência) é difícil. Se duas pessoas tentarem subir a mesma escada ao mesmo tempo, uma precisa esperar. A autora criou um sistema onde elas se organizam de forma que quase ninguém precise esperar, garantindo que a busca seja sempre rápida.

2. A Fila de Pedidos Infinita (Fila Lock-Free)

Muitos programas usam filas para distribuir trabalho. Imagine uma fila de caixas de supermercado.

  • O Problema: Filas tradicionais travam a porta inteira quando alguém coloca ou tira um item. Se 100 pessoas tentam usar a fila, 99 ficam paradas esperando. Além disso, pedir novos carrinhos de compras (memória) para a fila toda hora é lento e gasta energia.
  • A Solução da Autora: Ela criou uma Fila Sem Trancas.
  • A Analogia: Imagine que a fila é feita de blocos de LEGO grandes. Em vez de uma única fila longa e frágil, você tem vários blocos empilhados. Quando um bloco enche, você coloca outro ao lado sem parar o fluxo. Quando um bloco esvazia, você o devolve ao "depósito" para ser reutilizado depois.
  • O Truque: As pessoas podem colocar e tirar itens de blocos diferentes ao mesmo tempo sem bater uma na outra. Isso evita que a fila fique travada e economiza tempo pedindo novos blocos.

3. O Mapa de Tesouros (Tabelas Hash)

Tabelas Hash são como mapas que dizem exatamente onde um item está guardado.

  • O Problema: Em computadores grandes, o mapa pode ficar tão grande que as pessoas precisam andar até o outro lado do prédio (outro "nó NUMA") para pegar um livro. Isso gera "atrito" e lentidão. Além disso, quando o mapa fica cheio, ele precisa ser reorganizado (redimensionado), o que causa um caos temporário.
  • A Solução da Autora: Ela testou dois tipos de mapas:
    1. Mapa de Dois Níveis: Em vez de um mapa gigante e confuso, você tem um mapa pequeno que te diz em qual "armário" procurar, e dentro do armário há um mapa menor. É como usar um índice de capítulos antes de ler o livro. Isso mantém as pessoas mais próximas dos livros que precisam.
    2. Mapa de Ordem Dividida: Um sistema inteligente que cresce automaticamente sem precisar parar tudo para reorganizar.
  • O Resultado: Os mapas de dois níveis funcionaram muito melhor porque mantiveram as pessoas e os livros no mesmo "andar" do prédio, evitando viagens longas e desnecessárias.

O Segredo do Sucesso: Gerenciamento de Memória

Um dos maiores inimigos da velocidade nesses computadores é o "atrito" de pedir novos espaços de memória o tempo todo.

  • A Estratégia: A autora criou um sistema de reciclagem. Quando alguém devolve um livro (deleta um dado), ele não é jogado fora. Ele vai para uma "caixa de espera" e é reutilizado imediatamente por outra pessoa.
  • A Analogia: É como um sistema de entrega onde os caminhões não voltam vazios para a fábrica. Eles levam a encomenda, descem, pegam outra encomenda que estava esperando e voltam. Isso evita que o caminhão fique parado pedindo um novo veículo.

Conclusão: O que aprendemos?

O artigo mostra que, para fazer computadores modernos (com muitos núcleos) trabalharem juntos de forma eficiente:

  1. Previsibilidade é melhor que sorte: Uma estrutura de dados organizada matematicamente (como a Escada Mágica Perfeita) pode ser mais estável do que uma baseada em sorte.
  2. Não trave a porta: Usar filas e mapas que permitem que várias pessoas trabalhem ao mesmo tempo sem travar o sistema todo é essencial.
  3. Mantenha-se perto: Organizar os dados para que as pessoas não precisem viajar para o outro lado do prédio (evitar acessos remotos) é o segredo para a velocidade.

No fim das contas, a autora provou que é possível construir bibliotecas digitais gigantescas onde milhões de pessoas podem entrar, pegar e devolver livros ao mesmo tempo, sem que ninguém fique esperando na fila, tudo isso graças a um design inteligente e uma boa gestão de recursos.