Hola Platzinauta. 👋
Te comparto mis apuntes para que #NuncaParesDeAprender. 👀✍
Programación dirigida por eventos
Se caracteriza porque no controla la secuencia de ejecuciones, reacciona a los sucesos ocurridos.
Generalmente los programas corren indefinidamente integrando manejadores de eventos (event handlers).
Eventos
Casos de aplicación
Cómo funciona
Sí lo comparamos con la programación imperativa, tenemos una secuencia de pasos que se van a ejecutar de manera secuencial y después puede repetirse el ciclo o puede llegar a detenerse el programa porque así lo decidimos o porque forzamos su detención. En la programación dirigida por eventos, tenemos un ciclo que puede ser un while el cuál mientras haya una condición sea verdadera o falsa, se puede estar ejecutando de manera indefinida. Entonces este ciclo va a recibir ciertos eventos que van a modificar algunas variables de estado, que puede ser como el caso de un videojuego, el contador de vidas, en el cual la condición dice que mientras que el número de vidas sea mayor que 0, se va a estar ejecutando el programa, pero habrán ciertos eventos que van a hacer que ese número de vidas disminuya o aumenten y por consecuencia el videojuego termine en ese ciclo.
Lenguajes
Java
Javascript
C#
Librerías/Frameworks de GUI
-JavaFX, React.js, PyQT
Prácticamente cualquier lenguaje orientado a objetos.
*Programación concurrente
Analogía: Imagina ser el propietario de una panadería, mientras se calienta el horno, estás cortando masa, cortándola, preparándola y una vez que se están horneando, al sacarlos hay que esperar a que se enfríen y después colocar una cobertura de chocolate. Tú intentarás optimizar los recursos, mientras el horno se está calentando, debes preparar más masa, para que así, cuando termine, inmediatamente meter el otro lote de masa o si contratas a una persona que te ayude, dividirás las tareas, al hacer esto, estás ejecutando el paralelismo, que es dividir las tareas entre los recursos disponibles, siempre y cuando puedan dividirse.
Concurrencia
Coincidencia, concurso simultáneo de varias circunstancias.
Es cuando hay una serie de peticiones a un mismo recurso que podría ser limitado y se están atendiendo esas solicitudes de forma parcial o totalmente desordenada. Una analogía útil para entender, puede ser la panadería, imagina que tu panadería empieza a crecer y a ser muy grande, por lo tanto es bastante concurrida y los clientes empiezan a acumularse, por lo tanto, tú no puedes atenderlos a todos, empezarían a enojarse por no ser atendidos de forma rápida y ordenada. Una forma de solucionarlo, podría ser un sistema de tickets, para así atender a los clientes en su orden de llegada.
Concurrencia vs Paralelismo
En la concurrencia
tenemos una serie de peticiones con un solo recurso limitado para atenderlos, ¿Cuál sería el orden, la prioridad? etc.
En el paralelismo
Tenemos recursos divididos que pueden atenderlos de forma simultanea sin ningún problema
El paralelismo y la concurrencia, son conceptos diferentes pero que van de la mano, por ello debemos entender ambos para entenderlos entre sí.
Secuencia vs Concurrencia
En una secuencia
Vamos a tener los pasos A, B, C, D. Y estos serán atendidos en el orden que se hizo la petición.
En la concurrencia
Podemos iniciar en el proceso A, saltar al D, luego al C, completar el A y después pasar al último proceso.
Todo esto se hace mediante los hilos de un procesamiento
Estados de un hilo
Sección crítica del hilo
Es una sección de código que requiere acceso exclusivo a una variable compartida.
Comunicación entre hilos
Problemas de concurrencia
Carreras (Critical races)
Sucede cuando dos o más hilos desean acceder a un recurso lo más pronto posible. Podemos ver este ejemplo, tenemos una variable C, inicializamos en 0, pero después en alguna parte del código a C, le asignamos el valor de C + 1, entonces un hilo llegará primero y al ver que vale 0, le agregará el valor de 1, almacena ese dato y ahora C vale 1. Pero sí otro hilo llega después, pensará que C vale 1, entonces añadirá otro 1, almacenará ese dato y entonces C vale 2. Esto puede ser un problema en un sistema automatizado de dosificación de medicamentos. Sí el sistema es concurrente, ¿Entonces que hará? ¿Le dará una dosis o dos dosis? ¿Cómo se resuelve?.
Puntos muertos (deadlock)
Ocurre cuando un hilo espera por un evento que nunca sucederá.
Para que suceda un punto muerto deben de cumplirse 4 condiciones:
Problema de los filósofos
El problema plantea que hay una mesa redonda donde hay 5filósofos que están conversando, frente a ellos hay un plato de comida, a su derecha y a su izquierda, hay otros filósofos y hay un palillo chino a la derecha y otro a la izquierda, para comer se necesitan ambos palillos chinos, eso significa que habrá una persona que no comerá. Hay muchas formas de abordar el problema, pero esas soluciones pueden dar otros problemas, podría ser un sistema de turnos, pero entonces algunos se quedarían esperando hasta que la comida esté fría o tenga mucha hambre. Podríamos hacer que se alternen los turnos de comida.
Estrategias
Evitar que se cumpla alguna de las condiciones
Los monitores tienen 4 componentes principales:
Algunos lenguajes