// Estas leyendo...

CSHARP

Multithreading C#

Hola de nuevo aqui les dejo una pequeña explicacion del multithreading en C# asi como un pequeno codigo de una aplicacion de consola que muestra como crear un thread y algunos metodos y propiedades basicos relacionados a la clase thread( ) de los varios beneficios del multithreading es que podemos tener varios procesos con varios hilos ejecutandose dentro de ellos pero porque no usar nuevos threads por cada metodo que tengamos en nuestra aplicacion no podria hacer eso que todo se ejecutara mas rapido?? la respuesta es no de hecho podemos esperar todo lo contrario cuando nos escedemos en el uso de threads en nuestra aplicacion debido a que aplcaciones multithreading requieren y consumen recursos en exceso threads requieren memoria y como puedes suponer el numero de threadas esta limitado a la memoria disponible Asi mismo cada thread incurre en adicional saturacion del procesador creando muchos threads en tu aplicacion disminuye la cantidad de tiempo que tiene para executarse y aumentando el tiempo del procesador para cambiar entra la ejecucion de threads por lo que se recomienda solo usar threads en la parte de tu aplicacion que realmente se necesiten donde el usuario final de la aplicacion tenga la sensacion que es atendido por ejemplo en metodos que toman largo tiempo para su ejecucion como descargas navegaciones se puede tomar como consideracion cuando tu aplicacion necesita correr procciertos recursos de tu aplicacion son externos como acceso a databases, http networking o quiza algun archivo en la red en este caso tambien es aceptable usar multithreading en los metodos ya saben cualquier duda comuniquense con el staff!!

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        // En nuestra clase creamos dos hilos estaticos
        static Thread h1;
        static Thread h2;
        static Thread h3;

        /* asi mismo creamos dos metodos que relacionaremos a cada hilo en ejecucion
         * este primer metodo ejecuta un bucle e imprime el valor de i en pantalla */

        static public void hilo1()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine("Hilo_1 en ejecucion " + "," + i.ToString());
            }
            Console.WriteLine();
        }

        /* En este metodo igual tenemos un bucle que imprime el valor en pantalla pero este
         * metodo no se ejecuta hasta que termine de ejecutarse el metodo previo debido al uso del
         * del metodo Join() de la clase thread*/

        static void hilo2()
        {
            h1.Join();
            for (int i = 100; i <= 200; i++)
            {
                Console.WriteLine("Hilo_2 en ejecucion " + "," + i.ToString());
            }
            Console.WriteLine();
        }

        /* En este metodo estatico usamos el metodo sleep() de la clase thread el cual nos permite
         * poner nuestro hilo en ejecucion en pausa por cierto tiempo especificado en milisegundos
         * este bucle pone un resultado en pantalla cada 5 segundos debido al metodo sleep()*/

        static void hilo3()
        {
            string estadodelhilo = Thread.CurrentThread.ThreadState.ToString();
            for (int i = 0; i <= 5; i++)
            {
                Console.WriteLine("Hilo_3 en ejecucion " + "," + i.ToString());
                Console.WriteLine("thread " + estadodelhilo);
                Thread.Sleep(5000);
            }
        }

        /* En nuestro metodo main instanciamos nuestros metodos y los ponemos en ejecucion
         * asi mismo con el metodo start() los ponemos en ejecucion notese que al instanciar cada hilo
         * debemos de agregar cada metodo que se ejecutara con ese hilo*/

        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Multithreading en C# por xxxnocturnoxxx");
            Console.WriteLine("[AztekMindz.org]");
            Console.WriteLine();
            Thread.Sleep(5000);
            Console.ResetColor();
            //Aqui instanciamos nuestros dos objetos de la clase thread
            h1 = new Thread(new ThreadStart(hilo1));
            h2 = new Thread(new ThreadStart(hilo2));
            h3 = new Thread(new ThreadStart(hilo3));

            //Podemos agregarle prioridades de ejecucion a nuestros threads (Hilos)
            h1.Priority = ThreadPriority.Normal;
            h2.Priority = ThreadPriority.AboveNormal;
            h3.Priority = ThreadPriority.BelowNormal;

            // Algunos de los metodos y propiedades de la clase thread
            string estado1 = h1.ThreadState.ToString();
            string nombredelproceso = h3.Name;

            //Aqui ponemos nuestros objetos en ejecucion con el metodo start() de la clase thread
            h1.Start();
            h2.Start();
            h3.Start();
        }
    }
}

Comentarios

No hay comentarios para “Multithreading C#”

Deja un comentario