28 puntos por xguru 2022-11-28 | 14 comentarios | Compartir por WhatsApp
  • Dos preguntas que suelen hacer en entrevistas
    • Escribe un programa que cuente palabras en un archivo de texto
    • ¿Cuál es el cuello de botella de rendimiento en este programa?
  • A menudo la gente responde "leer desde el archivo", pero eso ya no es así
  • Hace 10-20 años sí lo era, pero en 2022 leer secuencialmente desde disco es muy rápido (el autor tampoco lo sabía antes de probarlo)
  • La parte que sí es un cuello de botella es procesar/parsear la entrada y asignarla en memoria: dividir en palabras, convertir a minúsculas y contar frecuencias con una tabla hash, entre otras tareas
  • Al probar un archivo de texto de 413 MB con Python/Go (un archivo formado al pegar 100 veces la Biblia del Rey Jacobo)
    • Leer toma apenas 0.1-0.2 segundos, mientras que el procesamiento tarda entre 7 y 2 segundos
  • En conclusión, al procesar "big data", el I/O de disco puede no ser el cuello de botella

14 comentarios

 
is9117 2022-12-01

Por más que sea un acceso secuencial, según el lenguaje y la biblioteca, influyen aspectos como la forma de usar el pipeline de I/O o la frecuencia con la que el desarrollador hace solicitudes a la API de I/O, así que creo que para decir que la I/O ya no es un cuello de botella hace falta establecer ciertas premisas.

 
yuriwin 2022-11-30

¿El I/O de red no cuenta como I/O? jajaja

 
yuriwin 2022-11-30

Por más rápido que se vuelva, el I/O sigue siendo I/O; por eso existen soluciones aparte dedicadas solo a la parte de I/O al programar.

 
love7peace 2022-11-29

¿Poner todo el disco de big data en SSD NVMe? Jaja... ¿cuánto demonios cuesta eso...?

 
loblue 2022-11-28

Para alguien como yo, que sufre mucho por el I/O de disco y trabaja en cosas donde hay que hacer que los platos se muevan lo menos posible, es una historia curiosa.
En el texto se menciona que se trata de algo "secuencial".
Si no hay ningún seek, quizá no sea una afirmación del todo incorrecta.

 
deokim 2022-11-28

Es un experimento basado en una premisa equivocada.

 
roxie 2022-11-29

¿Podrías dar más detalles, por favor?

 
deokim 2022-12-05

El concepto mismo de cuello de botella trata de tiempos relativos.
Es correcto comparar la velocidad de la CPU con la de I/O.
Que I/O se haya vuelto más rápido que en el pasado no significa que pueda ser más rápido que la CPU.

 
deokim 2022-12-05

También podría ser que solo se cargue en memoria virtual usando mmap, y que en la práctica se lea cada vez que la CPU realiza una operación.
La comunicación entre la CPU y toda la memoria (registros, memoria principal, disco) también es toda I/O.
https://stackoverflow.com/questions/5877797/how-does-mmap-work

 
park2348190 2022-11-28

Me da curiosidad cuál será el criterio para determinar qué es big data.

 
nicewook 2022-11-28

Es fascinante.

 
jungmin1237 2022-11-28

Hoy también sumo un conocimiento más.

 
xguru 2022-11-28

La URL del primer comentario en https://news.ycombinator.com/item?id=33751266 es interesante.
Napkin Math (matemática sencilla)
Dicen que el I/O secuencial ya casi se acerca a la velocidad de la memoria..

 
nicewook 2022-11-28

Eso de la matemática de servilleta, el nombre es demasiado atractivo.
¿Dicen que cuando creó UTF-8, Rob Pike lo garabateó en una servilleta para mostrarlo?