- 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
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.
I/O de rede não é I/O? kkk
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.
Vai colocar todos os discos de big data em SSD NVMe? kkk Quanto isso vai custar, afinal...
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
seeknenhum, talvez não seja exatamente uma afirmação errada.É um experimento baseado em uma premissa equivocada.
Poderia dar mais detalhes?
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.
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
Fico curioso para saber qual será o critério para definir o que é big data.
Interessante.
Hoje aprendo mais uma coisa.
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..
“Matemática de guardanapo” é um nome muito atraente. Dizem que, quando estava criando o UTF-8, Rob Pike rabiscou isso num guardanapo para mostrar.