A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Problemas de la concurrencia

13/21
Recursos

Aportes 31

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Una soluci贸n alternativa que se me podr铆a ocurrir para el caso de los fil贸sofos鈥 (es algo raro y asqueroso pero鈥 jaja)
.
Podr铆an ser fil贸sofos que tengan cierta sincronizaci贸n al comer, cuando un fil贸sofo se mete la comida a la boca, este deja los palillos en la mesa y otro fil贸sofo aprovecha a tomar uno de los palillos para meterse su porci贸n de comida y despu茅s dejar los palillos en la mesa y despu茅s otro fil贸sofo aprovecha a tomar uno de los palillos鈥 y as铆 sucesivamente hasta que el primer fil贸sofo trague su pedazo de comida y pueda tomar de nuevo su palillo que ya debi贸 de haber sido liberado antes 馃

Hola Platzinauta. 馃憢
Te comparto mis apuntes para que #NuncaParesDeAprender. 馃憖鉁

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:

  • Los hilos deben tener derechos exclusivos a los recursos.
  • Los hilos deben contener algunos recursos mientras esperan otros.
  • Los recursos no se pueden eliminar de los hilos en espera.
  • Existe una cadena circular de hilos en las que cada uno contiene uno o m谩s recursos del siguiente hilo.

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

  • Sem谩foros: Funcionar铆an como una variable de tipo entero, asociado a un mecanismo de cola de hilos. Si el sem谩foro toma valores de 鈥0鈥 y 鈥1鈥, es binario. En caso contrario es un 鈥渟em谩foro contador鈥.
  • Monitores: Estructuras de datos abstractas basados en los monitores o kernel de los S.O.

Los monitores tienen 4 componentes principales:

  • Inicializaci贸n: Contiene c贸digo a ser ejecutado.
  • Datos privados: Procedimientos que se utilizan desde dentro del monitor.
  • M茅todos del monitor: Procedimientos que se pueden llamar desde fuera.
  • Cola de entrada: Hilos que llaman a alg煤n m茅todo del monitor pero no tienen permiso para ejecutarse a煤n.

Algunos lenguajes

  • JavaScript
  • C#
  • Golang
  • Rust
  • Elixir
  • Haskell

驴Esto puede ser lo que se llama vulgarmente cuello de botella? Lo pregunto cuando recuerdo el caso de, por ejemplo, el programa se ralentiza porque le estamos mandando mucha informaci贸n a la grafica y hay poca memoria, con lo que el programa tiene que ir mandando poco a poco los datos. 驴estoy en lo correcto?

partir los palillos as铆 todos los fil贸sofos comen

鈿狅笍 Al lidiar con varias tareas, los programas concurrentes pueden presentar varios problemas como las critical races, deadlock, aplazamiento indefinido e injusticia.

Los fil贸sofos deber谩n implementar un sistema de turnos dobles en el que en cada turno comer谩n dos fil贸sofos separados entre ellos por otro fil贸sofo. Para que haya orden empezar铆an el 1 y 3, mientras 2, 4 y 5 hablan, terminan, le toca al 2 y 4 (w谩catela compartir ols palillos 馃槤) mientras 1,3 y 5 hablan, terminan, luego 3 y 5, terminan (aqu铆 el 3 ya comi贸 dos veces), luego el 4 y 1 (ya comieron los dos dos veces) y as铆 sucesivamente hasta que se termine la comida. Estoy segura que debe haber una forma matem谩tica de expresar esto 馃

Mi soluci贸n para el problema de los fil贸sofos es tomar un palillo, partirlo en 2 y usarlo 馃.
.
Ya que el profesor no puso tantas limitantes鈥
.
Ir a comprar m谩s
.
Preguntar por m谩s palillos, pudo ser un error del que organiz贸 todo en la mesa.
.
Lo m谩s apegado a la analog铆a es que coman en el orden que llegaron, quiz谩 tener un tipo de prioridad para los m谩s de mayor edad

En lo que respecta al problema de los fil贸sofos: Considero que cada uno deber铆a tomar un palillo y partirlo por la mitad y as铆 no tendr铆a que compartir su palillo con ninguno de los dem谩s fil贸sofos.
(Y de esa manera no se contagian,** jajaja, es broma**)

La mejor soluci贸n seria romper los palo a la mitad

Yo sentar铆a a los fil贸sofos (conforme a un reloj an谩logo) siendo la 1 el primer filosofo, empezar铆a de derecha a izquierda, un bocado por turno, dejando los palillos para que coma el otro filosofo y as铆 hasta terminar

Pues dado que se tratan de palillos, cortar铆a palillo a la mitad y pues tendr铆a 5 pares de palillos para cada fil贸sofo, no s茅 si tiene sentido pero bueno es una soluci贸n 馃槃

creo para el problema de los filosofos hay varias manera de resolver, para mi una solucion , que uno coma mientras los otros discuten, en sentido horario, asi se ejecuraria o comeria cada uno mientras los otros discuten

No s茅 si es un poco floja mi soluci贸n, pero podr铆an partir los palillos, o podr铆an compartir un plato dividiendo el n煤mero de fil贸sofos por plato, as铆 pueden aplicar alg煤n sistema de turnos y el tiempo de espera ser铆a menor.

Como solamente abr铆an dos pares de palillos, empezar铆an a comer los dos primeros fil贸sofos con diferencias de un lapso corto de tiempo, Ejm: de un min; en el momento que termine el primero (que fue el que empez贸 a comer primero), le pasa los palillos al tercero, y despu茅s que termine el segundo, le pasa los palillos al cuarto y as铆 sucesivamente :p

SOLUCI脫N PROBLEMA DE LOS FILOSOFOS
Como utilizar la concurrencia en este escenario:

Cantidad filosofos = 5
Cantidad recursos palillos = 2
Cantidad operaciones simultaneas = 2

Su poniendo que dos filosofos comiencen a comer al tiempo, los recursos podrian bloquearse cuando estos empiecen a masticar, lo cual abria tiempo para que otros dos filosofos limpien los palillos y inicien a comer, y asi sucesivamente.

Se me ocurre ahora con la nueva arquitectura Alder- Lake de Intel tienen una tecnolog铆a que se llama Thread Director, es una soluci贸n a los problemas de concurrencia que pudieran existir a la hora de asignar recursos.

Lo que podr铆amos hacer es dividir los palitos, ser铆an 10 por lo que cada filosofo podr铆a comer, claro un poco m谩s lento, pero podr铆a. Pas谩ndolo a un entorno tecnol贸gico, ser铆a como que un 5 hilo dividiera su poder en 2 para que 5 m茅todos que requieren 10 puedan ser ejecutados, obvio de manera m谩s lenta pero al final se podr铆an ejecutar. Soy nuevo en tec, si es que he dicho algo falso con respecto a los hilos o m茅todos me ser铆a de mucha ayuda su feedback

pueden romper los palillos a la mitad y cada uno tendr谩 dos palillos

Los sem谩foros permiten al programador asistir al planificador del sistema operativo en su toma de decisiones de manera que permiten sincronizar la ejecuci贸n de dos o m谩s procesos.

Un Servidor Concurrente Un servidor concurrente atiende a varios clientes al mismo tiempo.
Se trata de crear un nuevo proceso o l铆nea de ejecuci贸n cada vez que un cliente 鈥渓lega鈥 a pedir un servicio.

Dos procesos son concurrentes cuando se ejecutan de manera que sus intervalos de ejecuci贸n se solapan. Concurrencia aparente: Hay m谩s procesos que procesadores. Concurrencia real: Cada proceso se ejecuta en un procesador.

驴Tiene algo que ver que sean fil贸sofos?

Es decir, me inquieta un poco. Me hace sentir que ese dato tiene un papel importante en la soluci贸n. 鈥

Se que solo es un ejercicio, pero es divertido hacerse esas preguntas

Lo que se me ocurri贸 fue dejar al que tenga menos comida, coma primero y dejar al final al que tiene mas comida.

Si a alguien le surgio la duda de que es un Kernel?
Es el nucleo de un sistema operativo la base de su funcionamiento o un estandar鈥
Ejemplo facil seria Linux es kerne帽 base de sistemas operativos como Ubuntu, Debian, Manjaro, Kali, etc

Problemas de la concurrencia
Carreras (critical races): sucede por ejemplo al inicializar una variable en 1, agregarle 1 y almacenarlo. Un hilo puede llegar y pensar que la variable ya vale 1 y por eso agregarle 1 y ahora la variable sum贸 2

Puntos muertos (Deadlocks)
Cuando un hilo se queda esperando un evento que nunca suceder谩. Sucede cuando se dan 4 condiciones:

  1. Los hilos deben tener derechos exclusivos a los recursos
  2. Los hilos deben contener algunos recursos mientras esperan otros
  3. Los recursos no se pueden eliminar de los hilos en espera
  4. Existe una cadena circular de hilos en las que cada uno contiene uno o m谩s recursos del siguiente hilo

Estrategias para abordar los problemas de concurrencia

  • Sem谩foros: puede ser binario (puede pasar o no) o contador
  • Monitores: contienen una inicializaci贸n, datos privados, m茅todos y una cola de entrada

El Problema De Los Filosofos

Son 5 fil贸sofos son 5 palillos y se sabe que se comen con 2 palillos por persona as铆 que llegamos a la conclusi贸n que 2.5 palillos van a ser utilizado(para efectos pr谩cticos me voy a limitar a usar numero naturales) y sabiendo que 0.5 = 1 palillo, lo descartamos ya que no se puede comer con un palillo adem谩s, a cada filosofo le vamos a asignar un nombre al filosofo 1 " f1 " al filosofo 2 " f2 " y as铆 sucesivamente hasta llegar a 5. Teniendo esto como base pasemos a darle forma.

Primero f1 y f2 van a ser los primeros en comer, ya que seria injusto dejar a f3 y a f4 esperando mucho tiempo vamos a asignarle que f1 y f2 van de dos a tres mordidas siempre y cuando las mordida vayan a dar sean de la mis cantidad o sea, si f1 muerde 2 veces f2 morder谩 2 veces, si f2 muerde 3 veces f1 morder谩 tres veces. Ahora supongamos que le dieron " x " mordidas (3 >= x >=2 ) entonces ahora le toca a f3 y a f4 los cuales van a heredar las mismas funciones de f1 y f2 y solo falta f5, Aqu铆 tenemos un problema ya que para que sea todo parejo necesito que f3 o f4 sedan sus palillos pero f5 solo puede tener 1par por ende quedar铆a 1par no hay problema pero no el lo mas optimo por eso f4 va a dar sus palillos a f5 y 3 va dar sus palillos a f1 o f2 para efectos pr谩cticos digamos que a f1 entonces ya no quedan palillos desperdiciados. Ahora vamos a hacer un ciclo ya que f1 y f5 ya comieron solo quedan f2 ,f3 y f4 d谩ndole prioridad a f2 ya que es el que a pasado mas tiempo sin comer por ende f5 da su palillos a f2 y f1 le devuelve el favor y le da sus palillos a f3 ahora a que f2 y f3 ya comieron faltan f1 f4 y f5 d谩ndole prioridad a f4 porque es el que a pasado mas tiempo sin comer y ya que f2 quiere devolverle el favor a f5 se los da a el y as铆 sucesivamente d谩ndole siempre prioridad al que a estado mas tiempo sin comer y devolviendo el favor hasta que todos hayan terminado quiz谩 no al mismo tiempo pero si de la manera mas justa y optima en mi opini贸n.

Para el problema de los fil贸sofos:
Remover铆a uno de los 5 palillos, ya que no se puede hacer nada con 茅l y agrega complejidad innecesaria. Le dar铆a un turno a cada fil贸sofo, de esa forma cada que un fil贸sofo desocupe el par de palillos entre bocados, se los podr谩 pasar al siguiente en turno. El turno se repite hasta que terminen de comer.

El problema de los Fil贸sofos

una forma de que puedan usar los palillos seria que el filosofo uno y tres tomen los palillos de su derecha e izquierda y como un bocado, luego los pueden dejar los palillos en sus respectivos lugares para que contin煤en los fil贸sofos dos y cuatro luego seguir铆a el filosofo 5 y tambi茅n el filosofo dos quien ir铆a por el segundo bocado. y as铆 sucesivamente hasta terminar la comida.

Pueden usar el plato como 鈥渃uchara鈥 y un palillo como 鈥渢enedor鈥

Este problema no tiene una soluci贸n segura, a menos que se puedan conseguir mas palillos y de esta forma cada uno tenga sus palillos.

Como son fil贸sofos est谩n programados por el cosmos y de manera intermitente comer铆an sin as铆 cruzarse palillos
Otra opci贸n podr铆a ser incluso al compas de un vals o de luces que indicaran el turno de tomar palillos, tomar alimento pasar bocado. Hasta la misma mesa podr铆a tener plataformas dividas para cada filosofo y estas a su vez bajar铆an y subir铆an para dar el turno justo de alimentaci贸n .