using System;
public class Program
{
public static void Main()
//Conceptos Teoricos
//Existe internamente el Thread Scheduler, el cual se encarga que los diferentes threads reciban un tiempo
//de ejecución Tambien se enecarga de que los hilos que esten bloqueados o en espera no consuman tiempo de CPU
//Cuando se tiene un solo procesaro se hace lo que se conoce como "time.slicing".
//Cada threadr recibe un pedazo de tiempo del CPU y se va cambiando el thread que el corresponde la ejecución de forma
//rapida
//Cuando se tiene varios procesadores hay una mezcla entre time.slicing y concurrencia real. Los hilos se ejecuctan
//simultaneamente entre los deifrente CPU. Aun asi debemos de esperar encontrar time.slicing.
//por que el sistema operativo ejecuta sus propios hilos y otras aplicaciones tambien pueden estar ejecutando
//No hay que confundir los hilos con los procesos del sistema operativo.
//Los procesos se ejecutan a paralelo en la computadora.
//los hilos se ejecutan en paralelo a un proceso.
//Los procesos se mantiene separados unos de otros
//Los hilos tiene cierto grado de separación únicamente
//Los hilos comparte memoria con otros hilos que se ejecuten en la misma aplicación.estos es algo bueno y deseable
//Los HIlos nos dan grandes ventajasn pero debemos de ser cuidadosos al usarlos
//La programacion multihilos aumenta la complejidad sobre todod por la interaccion
//entre ellos . Hay que tener cuidado en los bugs, puesta cuestan mucho trabajo replicarlos y corregirlos
//or eso debemos de cuidar que la interacción entre los hilos sea los minimo posible.
//Una buena practica es encapsular en clases la logica para facilitar el testing y la correción de cualquier problema.
//El usar hilos tiene un costo de CPyu y recursos para poder planificar y cambiar la ejecución de los hilos.
//El usar hilos no es garantía de que la aplicación ejecutara mas rápido Si muchos accesos a disco son utilizados por
//varios hilos, incluso puede ser mas lento que una aplicación de un solo hilo.
}