0%
By | Desarrollo | 15 septiembre, 2017

Hoy en día, en el mundo de la computación el rendimiento es uno de los aspectos más importantes y que más preocupan a los ingenieros y arquitectos de software, sobre todo a aquellos que hacen microservicios.

Corregidme si me equivoco pero, por ejemplo, ¿qué sentido tiene que mi base de datos sea muy veloz si a cada acceso me bloqueo por completo? Quizás la solución no esté en comprar un petabyte de RAM para tener todos mis datos en memoria, sino en abordar el problema desde otro punto de vista: quizás la solución esté en la programación concurrente.

Y de esto va este post

. Os voy contar a grandes rasgos cómo funcionan “los futuros” implementados en Scala (en este caso) y cómo nos ayudan a hacer aplicaciones multihilo de una forma insultantemente simple.

Una sencilla analogía

Para empezar, haremos una sencilla analogía. Imaginemos el siguiente escenario (que nos ha ocurrido a todos alguna vez): pierdo la cartera. Cuando pierdes la cartera ocurren muchas cosas, la primera de ellas que te apetece una cerveza para ahogar las penas, pero no tienes con qué pagarla. Tras otras fases, viene la etapa de desesperación con eso de “si el dinero es lo de menos, lo que me da pereza es el DNI y las tarjetas”.

Empieza pues el largo y tedioso camino a las distintas administraciones que solo abren por la mañana y te dan cita con meses de espera, dependiendo de donde vivas. Cuando además añades que eres extranjero (belga en mi caso), te encuentras entonces con el agradable problema de que si no tienes el DNI no te pueden renovar el carnet de conducir, ya que el papel del NIE no vale para identificarte. Al menos esa fue mi experiencia, pero seguro que entendéis la analogía.

Se produce entonces un bloqueo. Tenía que esperar a tener el nuevo DNI para poder empezar a solicitar el carnet de conducir. Pero, ¿no sería fantástico poder ir haciendo todas las gestiones en la DGT entregando como DNI una promesa de que vas a entregar más adelante dicho DNI para que lo usen donde lo necesitan?

Los futuros permiten computar código con valores aún sin resolver #Programming #tech Click Para Twittear

Aquí es donde entramos de lleno en la computación con futuros (o promesas). Los “futuros” nos permiten hacer precisamente esto: computar nuestro código usando valores que no se han resuelto todavía.

¿Pero cómo que usarlos si no existen? ¿Y si nunca llegan? ¿Y si tardan demasiado? Paciencia, que vamos a ir explicando estas cosas poco a poco.

Mientras voy haciendo esto…

Siguiendo nuestro ejemplo, el DNI realmente no es mucho comparado con las demás gestiones que son necesarias a la hora de renovar el carnet de conducir. En mi caso, tuve que rellenar un formulario con mis datos, hacerme una foto, ir a la DGT de Arturo Soria en Madrid, entregar la solicitud y esperar a que me mandasen el nuevo carnet a casa.

Todas estas cosas también llevan tiempo y no necesitan para nada de nuestro DNI, que solo es necesario para acreditarnos. Se podría entonces ir rellenando todos estos datos y realizar otros procedimientos sin la necesidad del DNI.

Primer ejemplo, como la vida misma

Tomemos por ejemplo el siguiente código (bastante feo, lo sé):

2018 Reebok Zapatillas Foam Hombre Dmx Bogotá 0IHI6x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Libre Zapatos Nike Tallas Tenis En Mercado Es q0xnHXw
18
19
20
21
22
23
24
25
26
27
28
29
Mujer Negro 52803 Botín Mustang Zapatos De Económico O5522415
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import Mustang 52803 Mujer Negro Zapatos Botín Económico O5522415 Descala.concurrent.duration._
import scala.language.postfixOps
import scala.util.{Failure, Success}
 
object ClassicDGT {
Botín Zapatos O5522415 De Mujer Negro 52803 Económico Mustang
 
def run = {
val peticionDNI = Future {
Thread.sleep(1000Negro O5522415 52803 Mujer Botín Mustang Zapatos De Económico)Pieza Espátulas De Pintura Pintura Con Expresionista Pintado BYt4t
"123456789A"
}
 
println("DNI pedido")
 
val peticionCarnet = peticionDNI.map { DNI =>
println(s"Ya tengo mi DNI: $DNI")
println("Gestiones para el carnet de conducir.")

De Económico Botín O5522415 Zapatos 52803 Mujer Negro Mustang Bq7gvqZz

s"Nuevo carnet de conducir para DNI: $DNI"
}
 
println("Esperando a mi nuevo permiso")
 
val carnet = Await.De Negro Económico Mujer Zapatos Mustang O5522415 Botín 52803result(peticionCarnet, 1 minutes)
 
println(carnet)
}
}

Para los lectores de este blog que no conozcan Scala vamos a aclarar unos conceptos muy sencillos.

    • La palabra reservada “val” nos permite declarar un valor. Para que nos entendamos, esto es como una variable pero inmutable.
    • Para que este código funcione, necesitamos entre otras cosas un “Execution Context”, del cual hablaremos más adelante.
    • “println” imprime por consola una línea (con retorno de carro)
    Andar Como Skechers Para Descalzo Zapatillas Las qxtt1Ra

Vemos que hay una operación encerrada en un bloque “Future { }”. Todo lo que se ejecute en ese bloque se hará de manera asíncrona. Para ilustrar nuestro propósito, hemos hecho un sleep dentro del futuro para bloquearlo durante un segundo. El resto de cosas a computar, obviamente, no van a tardar más que unos pocos milisegundos.

Como vemos, lo siguiente que hacemos es una operación de “map” sobre ese futuro. Esta operación nos permite añadir un “callback” a nuestro futuro, señalando código que queremos hacer con el resultado de nuestra computación, en caso de éxito.

En este primer ejemplo, en caso de obtener nuestro nuevo DNI con éxito, empezaremos con las gestiones de la DGT. Esto se parece mucho a un enfoque normal y corriente bloqueante, ya que tenemos código independiente al DNI, como puede ser “println (“Gestiones para el carnet de conducir.“)”, encerrado en la función anónima en el map, que se ejecutará cuando se complete con éxito nuestro futuro.

Si ejecutamos este código Scala, tendremos la siguiente salida de consola:

Como podemos ver, se imprime Mustang 52803 Negro Mujer De Económico Botín Zapatos O5522415“Esperando a mi nuevo permiso” antes de las gestiones para el nuevo carnet de conducir, aunque técnicamente la impresión de “Esperando a mi nuevo permiso” esté detrás en el código. Esto es porque, como hemos dicho, el código encerrado en nuestro futuro de “peticionDNI” es asíncrono.

Después de esta impresión y a efectos demostrativos, bloqueamos el programa entero con: “Await.result(foo, 1 minutes)”

Esto es algo que no queremos hacer en nuestro programa real, dado que elimina todos los beneficios de los futuros. En nuestro ejemplo lo hemos hecho para poder extraer el resultado del resultado final, que sería nuestro carnet.

Consejos para programar con futuros en #Scala y hacer aplicaciones multihilo #business Click Para Twittear

Tras esta demostración, la próxima semana veremos un segundo ejemplo sobre cómo programar con futuros, en esta ocasión, de manera más práctica.

Imagen: BEEVA

De Chaleco Niña Zapatos Pepe Para Blanco Niños En Jeans qxwPTavTX
No tags.

Bruno Follon

Departamento de Tecnología de BEEVA

More posts by Bruno Follon

Related Post

Mujer 52803 Negro Zapatos O5522415 Mustang Económico Botín De

Leave a Comment

MADRID
Avda. de Burgos 16D
28036 Madrid [España]


MÉXICO
Paseo de la Reforma 403
Despacho 901
Colonia Cuauhtémoc
CP 06500 Ciudad de México

Zapatos Con Suela 2 ¡compara De Vans Mujer Plataforma Gruesa rrSwqaXAdn