Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Programación concurrente

12/21
Recursos

Aportes 18

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

En grandes sectores como por ejemplo el Bancario, como se maneja un gran volumen de transacciones, cuentan con sistemas replicados, que funcionan como respaldo el uno del otro (tolerancia a fallas). Estos nodos a su vez cuentan con “Backs”, estos están configurados y administrados de manera independiente pero son equivalentes entre sí y juntos ofrecen servicios de balanceo de cargas, esto para solucionar los problemas de concurrencia.

Hola Platzinauta. 👋
Te comparto mis apuntes para que #NuncaParesDeAprender. 👀✍

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

  • Creado: No está listo para correr.
  • Ejecutable/Listo: Espera para ejecutarse.
  • Ejecutando: Se ejecuta en el procesador.
  • Bloqueado: Espera a entrar al código que requiere acceso al recurso compartido o abandona el procesador.
  • Terminado: Se ha detenido y no puede reiniciarse.

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

  • Acceso exclusivo a un recurso compartido.
  • Intercambiar información con otro hilo.
Esto me recuerda totalmente a como trabaja un procesador. La CPU funcionaría de manera concurrente y la GPU con paralelismo.

Esto me suena a por ejemplo algún lenguaje de backend donde tiene que atender varias solicitudes al mismo tiempo, y de alguna forma me hace pensar en Go donde según he escuchado, este lenguaje es capaz de aprovechar varios hilos de la computadora.
.
Tal vez aquí es donde entra en juego esta parte de “un procesador con X hilos…”, me cuesta un poco de trabajo entenderlo pero creo que me hago una idea 🤔

🐱‍💻 La programación concurrente permite la ejecución simultánea de múltiples tareas interactivamente. Estas tareas pueden ser un conjunto de procesos o hilos de ejecución creados por un único programa.

Realmente no pense en un sistema de tickets para atender personas, pense en contratar a alguien que se encargue exclusivamente de la atencion mientras yo cocino a toda maquina xD

Y recuerden:

Concurrencia no es lo mismo que paralelismo.

La teoría de colas tiene mucha relación con el tema de paralelismo y concurrencia. Les recomiendo el vídeo de derivando al respecto:

¿Cuál es la fila más rápida del supermercado? | Teoría de colas

Programación concurrente

  • Concurrencia: es la capacidad de un programa, algoritmo o problema para tener múltiples contextos de ejecución divididos (en procesadores o hilos)
  • La diferencia con el paralelismo es que en el paralelismo hay más de un recurso, es decir hay división de recursos
  • En la concurrencia no necesariamente sigue una estructura secuencial ordenada

Estados de un hilo

  1. Creado: no está listo para correr
  2. Ejecutable/listo: espera para ejecutarse
  3. Ejecutando: se ejecuta en el procesador
  4. Bloqueado: espera a entrar al código que requiere acceso al recurso compartido o abandona el procesador
  5. Terminado: se ha detenido y no puede reiniciarse

Sección crítica del hilo
Es una sección del hilo en donde se requiere un acceso exclusivo a un recurso compartido y se necesita intercambiar información con otro hilo

Quería aportar un pequeño grano de arena con lo que aprendí leyendo un libro de Sistemas Operativos. 😃

Si bien cuando ocupamos distintas aplicaciones y servicios en nuestra PC nos da la sensación de estar haciendo actividades en PARALELO, en realidad no es así, en equipos con UN SOLO PROCESADOR lo que en realidad sucede es que se van SOLAPANDO LOS PROCESOS O HILOS a una velocidad altísima, simulando un PARALELISMO.

Esto se introdujo para que un proceso ( o hilo) no tenga que esperar al que está ocupando la CPU para recién ejecutarse, digamos que antes se producía un cuello de botella a la hora de ejecutar procesos, ya que la capacidad de la CPU no era aprovechada por la misma razón y de ahí nace el concepto del que les mencioné, este concepto se conoce como MULTIPROGRAMACIÓN.

Un hilo es simplemente una tarea que puede ser ejecutada al mismo tiempo que otra tarea.

Muy bueno el ejemplo de la panadería para explicar el tema de la concurrencia.

la programación lógica es declarativa, dada su orientación a trabajar por objetos. Encapsula y abstrae información

La computación concurrente apareció en el trabajo temprano en ferrocarriles y en la telegrafía, desde el siglo XIX y hasta los comienzos del 20, con algunos términos aún permaneciendo hoy en día, como por ejemplo “semaforos”.

Se conoce por programación concurrente a la rama de la informática que trata de las técnicas de programación que se usan para expresar el paralelismo entre tareas y para resolver los problemas de comunicación y sincronización entre procesos.

Muy buena explicación!!

sistema de kanban y produccion en serie para que cuando lo ocupe ta este listo

Tambien pudiera ser por autoservicio que cada quien hagarre lo que necesite y que se cobren solos