Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre los threads en Rust.

Anuncios
Anuncios

Una forma de sencilla de explicarlo es decir que cuando un programa es corrido por el ordenador este lo hace dentro de un proceso, a su vez nuestro codigo o programa puede correr multiples partes simultaneamente de manera independiente, la caracteristicas que se encarga de correr estas partes se las denomina threads o hilos (dependiendo del autor que lean), esta division puede mejorar la performance de nuestro codigo dado que le permite ejecutar varias tareas al mismo tiempo pero esto genera consecuencias debido pero de eso hablaremos mas adelante, no hay forma de que se respete un orden de ejecucion de los mismos y esto puede derivar en tres problemas:

  • Race condition, ocurre cuando los threads leen datos en un orden inconsistente
  • Deadlocks, cuando dos locks se quedan esperandose uno al otro
  • Bugs, surgidos por alguna de las circunstancias antes mencionados y dificiles de rastrear
Anuncios
Anuncios

Si bien sobre estos temas hablaremos mas adelante podemos comentar que el compilador trata de mitigar a la minima expresion cualquiera de estos tipos de problemas aunque esto no quita que debemos ser mas cuidadosos a la hora de trabajar con un codigo multithreading con respecto a otro que maneja un solo thread dado que el compilador no filtrara el cien porciento de las race condition o deadlock que se puedan generar en nuestro codigo.

Anuncios
Anuncios

Si bien usualmente los sistemas operativos nos proveen alguna API para poder manejar los threads y cuando se utiliza de esta manera habitualmente se lo denomina 1:1 (One-on-One), un thread del S.O por un thread del lenguaje, en cambio los lenguajes mayoritariamente poseen sus propias implementaciones para manejar los threads, a estos se los conoce como green threads (hilos verdes (?) o felices (?)), en este caso se diferencia principalmente en que no necesariamente seran la misma cantidad de threads del S.O y del lenguaje, por lo tanto puede suceder que se necesiten menos threads del S.O para corrrer todos los del lenguaje, estas diferencias nos traeran nuestros pros y contras dependiedo de como afecte a la ejecucion del codigo (runtime code).

Anuncios
Nota:
La palabra green se puede traducir tanto como verde o feliz, por eso nos referiremos como green threads.
Anuncios
Anuncios

Cuando hablamos de ejecucion nos referimos al codigo que esta incluido por el lenguaje en cada binario, este puede ser mas grande o mas corto (siempre dependiendo del lenguaje) pero todo lenguaje que no sea Assembler tendra un cierto codigo de ejecucion (runtime code), por lo tanto mientras mas chico sea este codigo de ejecucion mas chico sera el binario lo cual permitira que nuestro lenguaje se pueda vincular con otro lenguajes dado que tendra menos caracteristicas propias y sera mas facil de compatibilizar.

Anuncios

Con esto podemos decir que Rust en su forma mas basica de manejar los threads lo hace de 1:1 dado que es un lenguaje que trabaja a bajo nivel pero esto no quita que algunos crate tengan su propia implementacion mas basada en green thread porque como siempre el manejo de la ejecucion del codigo se debera ajustar a nuestras necesidades y para ciertos requerimientos necesitemos trabajar

Anuncios

En resumen, hoy hemos visto de forma teorica que son los threads, cuales tipos disponemos, cuales sus diferencias, cual utiliza de manera predeterminada Rust y como puede usar los del otro tipo, 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

Donación

Es para mantenimento del sitio, gracias!

$1.50