Bienvenidos sean a este post, hoy veremos un metodo para manejar threads.
Este metodo es utilizado para crear un nuevo thread y que podamos trabajar sobre el, para ello usaremos un closure, del cual hablamos en este post, donde le pasaremos una funcion que correra solo en ese thread, para entenderlo y verlo en accion hagamos un nuevo proyecto.
Este nuevo proyecto se llamara engendro, una vez creado iremos al archivo main.rs y modificaremos el codigo generado con el siguiente:
main.rs
use std::thread;
use std::time::Duration;
fn main()
{
thread::spawn(|| {
for i in 1..10
{
println!("{} desde el nuevo thread", i);
thread::sleep(Duration::from_millis(1));
}
});
for i in 1..5
{
println!("{} desde el thread ppal", i);
thread::sleep(Duration::from_millis(1));
}
}
Para este caso importaremos dos librerias, como son thread y Duration ambos de la libreria estandar, el primero sera para poder manipular los threads y el segundo sera para poder crear un intervalor de tiempo, pasando al main crearemos un nuevo thread mediante spawn y observen que le pasamos un closure como dijimos pero en este caso vacio dado que no necesitamos trabajar ningun valor, y la funcion sera un bucle for que contara de 1 a 10 y mostrara en pantalla el valor de la vuelta e indicara que es del nuevo thread, despues por medio de thread llamaremos a sleep para generar una pausa y aqui usaremos a Duration donde por medio de from_millis le indicamos cual sera la demora que usara, para este caso usaremos un milisegundo, por fuera del spawn tendremos otro bucle pero que contara de 1 a 5 donde haremos exactamente lo mismo que en spawn pero el mensaje indicara que el valor sera del thread principal, compilemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/rust/engendro$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running `target/debug/engendro`
1 desde el thread ppal
1 desde el nuevo thread
2 desde el thread ppal
2 desde el nuevo thread
3 desde el thread ppal
3 desde el nuevo thread
4 desde el thread ppal
4 desde el nuevo thread
tinchicus@dbn001vrt:~/lenguajes/rust/engendro$
Como pueden ver mientras existio el thread principal se corrieron los dos, por esta razon se interrumpio el bucle del nuevo thread, obviamente esta salida puede variar dependiendo de como procesa el ordenador internamente los threads pero en este caso lo hizo de manera correcta, comenzando como debe ser desde el thread principal pero si modificamos los dos sleep a 3 ms sucedera lo siguiente:
tinchicus@dbn001vrt:~/lenguajes/rust/engendro$ cargo run
Compiling engendro v0.1.0 (/home/tinchicus/lenguajes/rust/engendro)
Finished dev [unoptimized + debuginfo] target(s) in 0.96s
Running `target/debug/engendro`
1 desde el thread ppal
1 desde el nuevo thread
2 desde el thread ppal
2 desde el nuevo thread
3 desde el thread ppal
4 desde el thread ppal
3 desde el nuevo thread
tinchicus@dbn001vrt:~/lenguajes/rust/engendro$
Observen como no fue tan equilibrado como la primera vez donde uno iba despues del otro, e inclusive observen como nos quedo afuera de la salida una de las lineas del ejemplo anterior.
En resumen, hoy hemos visto spawn de thread, que es, para que se usa, como se utiliza, hemos visto un ejemplo practico para verlo en accion y por ultimo hemos visto con una simple modificacion como puede variar su conducta, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
