28 pontos por xguru 2022-11-28 | 14 comentários | Compartilhar no WhatsApp
  • Duas perguntas frequentemente feitas em entrevistas
    • Escreva um programa para contar palavras em um arquivo de texto
    • Qual é o gargalo de desempenho desse programa?
  • Muitas vezes as pessoas respondem "ler do arquivo", mas isso já não é mais verdade
  • Era assim há 10–20 anos, mas em 2022 ler sequencialmente do disco é muito rápido (o autor também não sabia disso antes de testar)
  • O gargalo está em processar/fazer o parsing da entrada e alocar em memória: dividir em palavras, converter para minúsculas, contar frequências com uma tabela hash etc.
  • Ao testar em Python/Go com um arquivo de texto de 413 MB (a Bíblia King James concatenada 100 vezes)
    • A leitura leva apenas 0,1–0,2 s, e o processamento leva de 7 s a 2 s
  • Em resumo, ao processar "big data", o I/O de disco pode não ser o gargalo

14 comentários

 
is9117 2022-12-01

Mesmo com acesso sequencial, dependendo da linguagem e da biblioteca, há fatores que influenciam, como a forma de usar pipes de I/O e a frequência com que o desenvolvedor faz chamadas à API de I/O; por isso, para dizer que I/O não é mais um gargalo, acho que é preciso deixar claras as premissas.

 
yuriwin 2022-11-30

I/O de rede não é I/O? kkk

 
yuriwin 2022-11-30

Por mais rápido que fique, I/O continua sendo I/O; é por isso que, na programação, existem soluções separadas só para a parte de I/O.

 
love7peace 2022-11-29

Vai colocar todos os discos de big data em SSD NVMe? kkk Quanto isso vai custar, afinal...

 
loblue 2022-11-28

Como alguém que sofre bastante com I/O de disco e precisa trabalhar de forma que os pratos se movam o mínimo possível, isso me parece uma história curiosa. No texto aparece a questão de ser "sequencial". Se não houver seek nenhum, talvez não seja exatamente uma afirmação errada.

 
deokim 2022-11-28

É um experimento baseado em uma premissa equivocada.

 
roxie 2022-11-29

Poderia dar mais detalhes?

 
deokim 2022-12-05

Gargalo em si é uma questão de tempo relativo.
Faz sentido comparar a velocidade da CPU com o I/O.
O fato de o I/O ter ficado mais rápido do que no passado não significa que ele possa ser mais rápido que a CPU.

 
deokim 2022-12-05

Pode ser que, usando mmap, ele apenas seja carregado na memória virtual, e na prática seja lido cada vez que a CPU realiza uma operação.
A comunicação entre a CPU e toda a memória (registradores, memória principal, disco) também é toda I/O.
https://stackoverflow.com/questions/5877797/how-does-mmap-work

 
park2348190 2022-11-28

Fico curioso para saber qual será o critério para definir o que é big data.

 
nicewook 2022-11-28

Interessante.

 
jungmin1237 2022-11-28

Hoje aprendo mais uma coisa.

 
xguru 2022-11-28

A URL do primeiro comentário em https://news.ycombinator.com/item?id=33751266 é interessante.
Napkin Math (matemática simples)
Dizem que o I/O sequencial está chegando quase à velocidade da memória..

 
nicewook 2022-11-28

“Matemática de guardanapo” é um nome muito atraente. Dizem que, quando estava criando o UTF-8, Rob Pike rabiscou isso num guardanapo para mostrar.