Hola, en este curso te mostraré Cómo perfilar una aplicación en Pharo.
Eso significa medir la ejecución de expresiones
para ver si podemos reemplazar ellos con otros para ganar tiempo,
durante la ejecución de un programa.
Básicamente, lo que dice la gente es, si nunca has perfilado
una aplicación que podrías aumentar las velocidades en un 40-50%.
No estoy convencido. No lo sé, no tengo pruebas.
Pero puedo mostrarte las herramientas en Pharo
por hacer este perfil.
La primera expresión en Pharo es "timeToRun".
Es un mensaje que enviamos a un bloque,
que nos dará el tiempo de ejecución de una expresion
Entonces, aquí en "1000 factorial",
Quiero medir el tiempo de ejecución. de "1000 factorial", lo puse en un bloque
y envío el mensaje, "Hora de correr".
Ahora que tenemos 'timeToRun' es fácil comparar 2 ejecuciones.
Aquí hay un pequeño ejercicio:
Si hago "select" seguido de "collect",
¿Es más lento que "select:thenCollect",
sabiendo que esto implica dos pases
en el primer caso y uno en el segundo.
Entonces, creo que llevará más tiempo, pero vamos a verificar.
¿Qué debo hacer? Yo creo mi colección en ambos casos,
Estoy buscando, creo mi colección con 10 elementos, una pequeña colección,
y lo que haré es crear un cierto número de veces,
Voy a hacer un bucle para que pueda correr Las expresiones varias veces.
Puedes ver, en la primera parte,
Tengo mi colección, Selecciono cada elemento mayor de 5,
y luego cuadraré los elementos que he seleccionado,
y en la segunda expresión, diré, ¿Qué quiero seleccionar?
Todo más grande que 5, y los cuadraré.
Vemos que el sistema me dice eso es 500 milisegundos,
y eso es 300 milisegundos. La segunda expresión es mejor.
Ves cómo funciona, Depende de ti hacerlo.
Tenga en cuenta que a veces estamos obligados para poner bucles muy grandes dentro,
para amplificar la medición, para ambos casos, por supuesto.
De lo contrario, hay otra operación, otro mensaje llamado "banco".
"Bench" nos dirá ¿Cuántas veces el código,
que se está estudiando, se ejecuta durante 5 segundos.
Tomo mi "banco factorial 1000" ejemplo de nuevo, y puedo ejecutarlo
610,000 veces por segundo.
En este caso, si así lo deseamos, también podemos hacerlo
que la cifra sea lo más alta posible.
También hay una variante de banco, "benchFor"
donde puede especificar el tamaño. Lo que es interesante ver
es que "2 segundos", es realmente el "segundo" mensaje,
que se envía al mensaje 2, que nos dará una duración,
una instancia de la clase Duración
y que controlará cuánto tiempo funciona el sistema
Esto te muestra una vez más que todo es un objeto en Pharo.
Configuré los segundos en 2 segundos. Envío el mensaje "segundo" al objeto 2.
Lo que tienes a continuación, También hay lo que llamamos un "perfilador",
que se basa en el muestreo.
Lo que sucederá es, ejecutarás tu programa,
y se realizará a intervalos regulares
para inspeccionar la pila de ejecución,
mira lo que hay en la pila y recopilar información.
Entonces, ¿cómo lo mencionamos? Hacemos "timeProfiler, spyOn"
y lo pasaremos un bloque. Quiero repetir 20 veces
que mostraré en la transcripción,
"1000 factorial",
que convierto en una cuerda, que generalmente cuesta más.
Después de eso, el profiler nos dará este tipo de resultado,
con un árbol que nos muestra las ramas entre los cuales hemos pasado la mayor parte del tiempo.
Nos muestra que pasamos el 63% de las veces. en el método "printOn:base".
Es solo para mostrarte que está ahí.
Hay un perfilador con el que puedes jugar si te interesa
Entonces, para resumir,
para empezar,
Puedes usar "timeToRun", "banco" y el perfilador.
Hay un capítulo en el libro "En lo profundo de Pharo" mostrando este tipo
de la técnica de optimización.
Solo quería señalar, como ves en estos 3 ejemplos,
siempre usamos bloques. Este es un bloque ...
Este es un bloque también ... ¿Por qué?
Lo viste en el curso en bloques que te permiten
para congelar la expresión, la definición del bloque
no ejecuta y da "banco" la posibilidad
de controlar la cantidad de ejecuciones
o decidir cuándo se ejecuta del programa comenzará.
La otra cosa que diría es:
descubra cómo "timeToRun" y "banco" están implementados.
Para hacer eso, haz clic en Expresión
y hacer "navegar" o "implementar" y verás el código.