viernes, 26 de octubre de 2012

Introducción a Networking

1.1.1.        Que es Networking
El termino Networking se refiere a la posibilidad de trabajar con diversas aplicaciones ubicadas físicamente en distintas estaciones de trabajo y permitir que se conecten vía una red, para trabajar de manera cooperativa o simplemente enviar y recibir información.

1.1.2.        Que es un socket
Un Socket es una representación abstracta del extremo (endpoint) en un proceso de comunicación. Para que se dé la comunicación en una Red, el proceso de comunicación requiere un Socket a cada extremo Emisor/Receptor y viceversa.



La comunicación con sockets sigue el modelo Cliente/Servidor/Cliente. En la mayoría  de los  casos  un programa  Servidor fundamentalmente  envía  datos, mientras que un programa Cliente recibe esos datos, aunque es raro que un programa exclusivamente reciba o envíe datos. Una distinción confiable se logra si consideramos Cliente al programa que inicia la comunicación y Servidor al programa que espera a que algún otro iniciecomunicación con él.

viernes, 19 de octubre de 2012

Ejemplo de señalización ( wait() y notify() )

En este ejemplo vamos a tener 3 clases: una clase Main, una clase Saludo y una clase Personal (Hilo).

Clase Main:

public class Main {
   
    public static void main(String[] args) {
       
        // Objeto en comun, se encarga del wait y notify
        Saludo s = new Saludo();
       
        /*Instancio los hilos y le paso como parametros:
         *

Ejemplo exclusión mutua (synchronized)

En este ejemplo vamos a tener 3 clases: una clase Main, una clase CuentaBanco y una clase VerificarCuenta (Hilo).

Clase Main:

public class Main {
    public static void main(String[] args) {
       
        VerificarCuenta vc = new VerificarCuenta();
       
        Thread Luis = new Thread(vc, "Luis");
        Thread Manuel = new Thread(vc, "Manuel");
       
        Luis.start();
        Manuel.start();
    }
}

Sincronización (Threads)


La importancia de la sincronización
La programación concurrente puede dar lugar a muchos errores debido a la utilización de recursos compartidos que pueden ser alterados. Las secciones de código potencialmente peligrosas de provocar estos errores se conocen como secciones críticas.

En general los programas concurrentes deben ser correctos totalmente. Este concepto es la suma de dos conceptos distintos de la corrección parcial(o safety) esto es que terminara en algún momento de tiempo finito. En esto programas por lo tanto hay que evitar que varios hilos entren en una sección critica (exclusión mutua o mutex) y que los programas se bloqueen (deadlock).

Planificación de Threads (Prioridades)


Que significa planificación
Un tema fundamental dentro de la programación multihilo es la planificación de los hilos. Este concepto se refiere a la política a seguir de que hilo toma el control del procesador y cuando. Obviamente en el caso de que un hilo este bloqueado esperando una operación de I/O este hilo debería dejar el control del procesador y que este control lo tomara otro hilo que si pudiera hacer uso del tiempo de CPU. ¿Pero que pasa si hay más de un hilo esperando? ¿A cual de ellos le otorgamos el control del procesador?

Prioridades
Para determinar que hilo debe ejecutarse primero, cada hilo posee su propia prioridad: un hilo de prioridad mas alta que se encuentre en el estado LISTO entrara antes en el estado EN EJECUCION que otro de menor prioridad.

El método setPriority()
Para establecer la prioridad de un thread se utiliza el método setPriority() de la siguiente manera: