ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

PROGRAMCION RECURRECENTE


Enviado por   •  28 de Enero de 2023  •  Trabajo  •  2.248 Palabras (9 Páginas)  •  112 Visitas

Página 1 de 9

[pic 1]

Actividad 2

Cuadro Comparativo

Programación concurrente

[pic 2]

EQUIPO 4

JOSAFAT EMANUEL DIAZ MARTÍNEZ

DANIEL ESPINOSA JIMÉNEZ

MANUEL DE JESÚS MAYORGA GONZÁLEZ

Ciudad de México, 29 de enero de 2023

INDICE

INTRODUCCIÓN        3

CUADRO COMPARATIVO        4

CONCLUSIONES        8

REFERENCIAS        9


INTRODUCCIÓN

El cómputo paralelo requiere soporte de hardware, es decir, sistemas que tienen más de un procesador que se utilicen simultáneamente para resolver el problema computacional.

Esto puede lograrse con una misma máquina multiprocesador o multicore (varias unidades de procesamiento llamadas cores en el mismo chip), y a su vez cada core puede soportar tecnologías como hyperthreading. En cualquier caso, comparten el bus de la computadora, el reloj y en ocasiones la memoria y dispositivos periféricos. Se les conoce también como sistemas fuertemente acoplados.

Un sistema distribuido es un conjunto de programas informáticos que utilizan recursos computacionales en varios nodos de cálculo distintos interconectados vía una red, para lograr un objetivo compartido común. El utilizar varias máquinas o nodos implica que los recursos de una sola máquina no son suficientes para resolver el problema computacional.

La finalidad de paralelizar un algoritmo es disminuir el tiempo de procesamiento mediante la distribución de tareas entre los procesadores disponibles. Y para lograr tal fin, han surgido no uno sino varios paradigmas de aplicaciones distribuidas y varias arquitecturas posibles, ya que aunque algunas se enfocan en sistemas abiertos, en realidad un sistema distribuido puede integrar diferentes plataformas de cómputo, desde mainframes, servidores, clusters, computadoras de usuario final (sean PCs, portátiles) o incluso móviles. Los recursos computacionales pueden estar cercanos físicamente conectados por una red local, o distantes geográficamente conectados vía Internet, redes móviles, o WANs (ver What is Distributed Computing, 2021). Independiente de ello, el sistema distribuido tiene como características:

  • Escalabilidad, es decir la habilidad para expander el sistema agregando más máquinas como sea necesario. Dicha expansión horizontal puede ser implementada de muchas maneras, desde provisionamiento manual y costoso de máquinas físicas, o más acelerado usando máquinas virtuales, hasta contenedores o recursos de cómputo elásticos en la nube.
  • Redundancia, para lograr una mayor resiliencia, es decir, tolerancia a fallos, pues para los sistemas cuya arquitectura depende de una sola máquina, esa máquina es un punto único de falla (SPOD, single point-of-failure).

Entre los diversos paradigmas de aplicaciones distribuidas, tenemos de mayor a menor nivel de abstracción (ver Distributed Application Paradigm):

  • Agentes objeto, aplicaciones colaborativas
  • Servicio de red, brokers de eventos, agentes móviles
  • RPC (remote procedure calls), microservices, web APIs
  • Cliente-servidor, P2P
  • Paso de mensajes

Lo anterior se elabora con más detalle en la siguiente sección.


CUADRO COMPARATIVO

Tipos de Sistemas / Categorías de análisis

Sistemas Paralelos

Sistema Distribuidos

Características

  • Acelera la solución
  • Requiere soporte de hardware para la ejecución simultánea de tareas.
  • El paralelismo incluye:
  • Multiproceso, ejecutando varios procesos a la vez.
  • Multihilo, ejecutando varios hilos de control dentro de un mismo proceso.
  • Paralelismo a diferentes niveles: grano grueso y grano fino.
  • La tolerancia a fallas es limitada.
  • Cada procesador cuenta con su propia memoria local en cachés de varios niveles.
  • La memoria de un proceso no es compartida con otros. Los hilos comparten la memoria de su proceso.
  • Un sistema distribuido consta de varias máquinas por lo que soporta paralelismo.
  • Permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por varios usuarios y/o agentes.
  • Sistemas sensibles al tiempo, requieren incluir en su diseño un reloj global para sincronizar los nodos y no afectar la coordinación y resultados del procesamiento.
  • Fallos independientes de los componentes: su diseño debe cumplir con la característica de ser redundante, para que aunque un componente del sistema falle de manera independiente, los demás trabajen sin mayor problema, esto permite una mayor resiliencia del sistema.

Ventajas

  • El resolver un problema más rápido hace viable muchas soluciones.
  • Ventaja competitiva, provee una mejora de los tiempos para la producción de nuevos servicios.
  • Colaboración y flexibilidad operacional
  • La escalabilidad horizontal del sistema permite aprovechar computadoras pequeñas reduciendo el costo
  • Se beneficia de redes cada vez más rápidas y económicas
  • Recursos compartidos logra un uso más eficiente de los mismos
  • Tolerancia a fallos

Desventajas

  • No todos los lenguajes de programación soportan hilos, típicamente lenguajes de scripting, aunque hay sus excepciones.
  • Lenguajes interpretados puede que no aprovechen los múltiples cores disponibles, a pesar de que soporten concurrencia con el uso de hilos, como es el caso de Python.
  • Al tener varios hilos de ejecución, surgen problemas coordinando los hilos, sobre todo en las secciones críticas de los algoritmos, donde hay que obligar a  que sólo un hilo usa el recurso compartido a la vez. Se suele revisar desde el diseño del algoritmo a fin de corregirlo.
  • Problemas típicos: dead locks, race conditions, starvation (lockouts), violación de la exclusión mutua, unfairness (injusticia al momento de permitirle o no a los hilos ejecutarse), errores de lectura y escritura, y errores transitorios cuando a veces corre y la salida es correcta y otras veces no.
  • Complejidad para administrar el stack tecnologíco. El sistema puede constar de múltiples plataformas, desde apps móviles, web APIs, programas en mainframes. Tienen un stack tecnológico muy extenso que los hace muy difíciles de administrar, actualizar, parchar.
  • Complejidad de la seguridad del sistema. Debido al gran número de componentes de diferente tipo, la superficie de ataque es mucho mayor.
  • Complejidad del desarrollo. Implica colaboración entre diferentes equipos de desarrollo, frontend y backend. Eso hace complejo acordar la arquitectura y tener una visión end-to-end del sistema.
  • Complejidad del diagnóstico de fallas. Las N capas del sistema distribuido pueden crecer de manera caótica, de modo que si hay un fallo, resulta muy difícil diagnosticarlo. Logs aplicativos requieren a su vez un manejo de error muy detallado en el código. Ha surgido Chaos Engineering, que busca mantener la confiabilidad del sistema.

Componentes

  • CPUs multi núcleo  (cores)
  • CPUs pueden incluir coprocesadores gráficos en el mismo chip, con su propia memoria para gráficos.
  • El sistema debe considerar tarjetas de memoria de la velocidad apropiada. DDR5, va de 4800MHz hasta 7200MHz.
  • El sistema debe diseñarse con la cantidad suficiente de memoria RAM, a fin de evitar el uso excesivo de la memoria SWAP al grado que impacte el performance.
  • Supercomputadoras: Para aplicaciones intensivas, como puede ser predicción del clima, cores bancarios, telecomunicacione, etc., es común el uso de supercomputadoras, la más rápida del mundo en 2022 es la supercomputadora Frontier, con 8,730,112 cores, 2.5x veces más rápida que la del segundo lugar.
  • Servicios de comunicación
  • Sistemas de ficheros distribuidos nombrados.
  • Servicios de sincronización y coordinación de procesos
  • Memoria compartida distribuida
  • Gestión de procesos
  • Seguridad de procesos y servicios.
  • Sistemas distribuidos muy sensibles a la latencia, por ejemplo, sistemas de trading de ultra baja latencia, o un sistema de cirugía remota, pueden aprovechar las últimas tecnologías de redes ultrarrápidas, y tarjetas de red que soportan anchos de banda de hasta 100 Gbps para ultra baja latencia, por ejemplo las tarjetas Mellanox ConnectX-5 de Nvidia.
  • El sistema puede constar de varios tipos de redes para lograr su objetivo: redes móviles, redes ethernet de consumo o empresariales, y redes ultrarrápidas.

Funcionamiento / arquitectura

Arquitecturas paralelas a nivel de procesador:

  • SISD: Single Instruction Stream Data stream. En un ciclo de reloj se ejecuta una instrucción con un solo dato.
  • SIMD: Single Instruction stream Multiple Data stream.
  • MISD: Multiple Instruction stream Single Data stream.
  • MIMD: Multiple Instruction stream, Multiple Data stream. Cualquier CPU o GPU multicore tiene una arquitectura MIMD.

Mecanismos de comunicación entre procesos (IPCs):

  • Shared-memory: Regiones de memoria soportadas por el OS, para intercambiar datos entre procesos, ya que la memoria de los procesos es independiente entre sí.
  • Pipes (tuberías), con y sin nombre (anónimas). Un proceso padre lanza un proceso hijo y se comunican a través del pipe sin nombre. Procesos sin relación padre-hijo pueden usar pipes con nombre.
  • Eventos: soportados por el OS para mandar mensajes entre procesos, incluso hacer broadcasting del mensaje.
  • Sockets de red: UDP o TCP/IP sobre IPv4o IPv6.
  • Sockets locales: no tienen dirección de red, para comunicaciones dentro de la misma máquina.
  • Archivos: El OS provee system calls para bloquear el uso del archivo, luego liberar el lock.
  • Mapped-memory: Son archivos gestionados sin buffer al estilo del SWAP.
  • Otros. Windows agrega más mecanismos para comunicar procesos: el Clipboard, COM, Data Copy, DDE, RPC, etc.

Coordinación de hilos de ejecución:

  • Semáforos o mutex locks (bloqueos mutuamente exclusivos) para controlar el acceso a datos en la memoria del mismo proceso durante la ejecución de secciones críticas del algoritmo. El OS provee syscalls para controlar los semáforos, obtener y liberar los locks.
  • Conjunto de máquinas conectadas por redes.
  • Aprovecha la capacidad de procesamiento local que permite interfaces de usuario, ya sean clientes pesados (thick or fat clients) o ligeros (thin or light weight clients).
  • Comparten recursos a nivel de red: bases de datos, periféricos, sensores, etc.
  • Procesos disponibles para, Servicio de múltiples usuarios y ejecución paralela de aplicaciones

Varios paradigmas de sistema distribuido (Kahanwal, 2012), y siguen evolucionando:

  • Cliente-servidor: arquitecturas de 2, 3, y N-capas, incluyendo SOA, microservicios, etc.
  • P2P (peer-to-peer): cada nodo es tanto cliente como servidor.
  • Clusters: grupo de máquinas master-slave, o multi-master, para evitar puntos de falla únicos. Ejemplos: clusters de  Kafka, clusters de Kubernetes. La réplica entre clusters logra redundancia.
  • Grid: interconexiones a grandes distancias de clusters, supercomputadoras, workstations, etc.
  • Cloud. Varias arquitecturas: public clouds, private clouds, hybrid (on-prem y cloud), multicloud.
  • Jungle: interconexión de arquitecturas diversas bajo un modelo distribuido, extremadamente heterogéneo.
  • Edge computing y Fog computing se aprovecha el poder de cómputo de los nodos más pequeños, por ejemplo sistemas IoT, smartwatches procesos para extraer información de los sensores.

Arquitecturas de comunicación entre procesos distribuidos, típicamente sobre la red, pero no necesariamente (comunicaciones ópticas con láser o infrarrojos son posibles):

  • Webservices: SOAP, REST.
  • Web APIs: incluyen webservices y RPC.
  • Queues: en esta categoría tenemos tecnologías como IBM MQ, RabbitMQ / AMQP)
  • Event-driven architectures: tecnologías que soportan data streaming. Kafka, PubSub.
  • P2P: peer-to-peer, como las aplicaciones de sharing estilo Mule y Napster.
  • Descentralizadas: Blockchain y redes Ethereum.


...

Descargar como (para miembros actualizados) txt (16 Kb) pdf (189 Kb) docx (251 Kb)
Leer 8 páginas más »
Disponible sólo en Clubensayos.com