Anuncios

Bienvenidos sean a este post, hoy veremos un metodo para manejar threads.

Anuncios

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.

Anuncios

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));
	}
}
Anuncios
Anuncios

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$
Anuncios

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$
Anuncios

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.

Anuncios

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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50