PDF de programación - Programación concurrente

Imágen de pdf Programación concurrente

Programación concurrentegráfica de visualizaciones

Actualizado el 26 de Mayo del 2018 (Publicado el 22 de Mayo del 2018)
757 visualizaciones desde el 22 de Mayo del 2018
1,1 MB
100 paginas
Creado hace 13a (30/01/2008)
Programación
concurrente

Josep Jorba Esteve
Remo Suppi Boldrito

P07/M2106/02841

© FUOC • P07/M2106/02841

2

Programación concurrente

© FUOC • P07/M2106/02841

Índice

Programación concurrente

Introducción .............................................................................................. 5

Objetivos ..................................................................................................... 7

1. Conceptos y definiciones ................................................................... 9
1.1. Ámbitos de computación concurrente ............................................. 11
1.2. Cómputo científico .......................................................................... 12
1.3. Soporte de la programación concurrente

a los sistemas distribuidos ................................................................ 15

2. Clasificaciones arquitecturales ....................................................... 17
2.1. Taxonomía de Flynn ........................................................................ 17
2.2. Por control y comunicación ............................................................. 19
2.3. Clusters y grid .................................................................................... 21

3. Descomposición de problemas ......................................................... 24
3.1. Una metodología básica ................................................................... 24
3.2. Modelos de descomposición ............................................................ 26
3.2.1. Memoria compartida ............................................................. 26
3.2.2. Paralelismo de datos .............................................................. 27
3.2.3. Paso de mensajes ................................................................... 28
3.3. Estructuras de programación............................................................. 29
3.3.1. Master-worker ......................................................................... 30
3.3.2. SPMD ..................................................................................... 30
3.3.3. Pipelining ................................................................................ 31
3.3.4. Divide and conquer .................................................................. 31
3.3.5. Paralelismo especulativo ....................................................... 31

4. Modelos de Interacción ...................................................................... 32
4.1. Cliente-servidor ................................................................................ 33
4.2. Servicios multiservidor y grupos ...................................................... 39
4.3. Arquitecturas basadas en mensajes .................................................. 43
4.4. Servidores proxy ................................................................................ 45
4.5. Código móvil .................................................................................... 46
4.6. Procesamiento peer-to-peer ................................................................ 48
4.7. Arquitecturas orientadas a servicios ................................................. 51

5. Paradigmas de programación........................................................... 54
5.1. Paso de mensajes .............................................................................. 55
5.1.1. Ejemplos de programación ................................................... 58
5.1.2. Message-oriented middleware (MOM) ...................................... 61
5.2. RPC ................................................................................................... 62

© FUOC • P07/M2106/02841

Programación concurrente

5.2.1. Ejemplos de programación ................................................... 63
5.3. Memoria compartida. Modelos de hilos (threading). ....................... 65
5.3.1. MultiThreading ..................................................................... 65
5.3.2. OpenMP ................................................................................. 69
5.4. Objetos distribuidos ......................................................................... 72
5.5. Modelos de componentes ................................................................ 78
Java Beans .............................................................................. 79
5.6. Web Services ...................................................................................... 82
5.6.1. Un ejemplo de programación con JAX-WS .......................... 83

5.5.1.

6. Casos de uso: paradigmas y complejidad ...................................... 89
6.1. Algoritmo Merge Bitonic .................................................................. 91
6.2. Algoritmo de la burbuja .................................................................... 92
6.3. Algoritmo Radix................................................................................. 93
6.4. Conclusiones .................................................................................... 94

Glosario ..................................................................................................... 97

Bibliografía .............................................................................................. 99

© FUOC • P07/M2106/02841

Introducción

5

Programación concurrente

Como consecuencia del rápido desarrollo de Internet, la programación distri-
buida está haciéndose rápidamente popular día a día. Internet provee de los
primeros mecanismos básicos para una infraestructura global en las aplicacio-
nes distribuidas, un espacio de nombres global (basado en las URL) y protoco-
los de comunicación globales (TCP/IP). La mayoría de las plataformas de
sistemas distribuidos toman esta base para poder implementar diferentes mo-
delos de aplicaciones y de sus usos.

Por otro lado, cuando generalizamos hacia el concepto de concurrencia, como
habilidad de ejecutar múltiples actividades en paralelo o simultáneas, introdu-
cimos diferentes tipos de programación, como la paralela, la distribuida y la
de memoria compartida. El conjunto de las cuales (lo denominaremos progra-
mación concurrente) se aplica en mayor o menor medida a diferentes sistemas
distribuidos según el ámbito de aplicación.

En cuanto examinamos la programación concurrente, nos damos cuenta
de su importancia actual, y de la prospección de futuro que tiene, ya sea
desde el desarrollo de Internet y sus aplicaciones, o desde el nuevo hard-
ware de las CPU (por ejemplo, en la forma de multicores), que nos introdu-
cirá la programación concurrente como un elemento básico para todo
desarrollador de aplicaciones.

Los ambientes donde se desarrolla la programación concurrente, ya sea hoy
o en un futuro próximo, están incrementándose paulatinamente, desde las
ya mencionadas CPU multicore, y las tarjetas gráficas con sus procesadores
concurrentes (y en este sentido, el campo del software en la programación
de videojuegos), a las redes inalámbricas, y/o redes de sensores trabajando coo-
perativamente, pasando a las aplicaciones a nivel Internet, con los sistemas de
compartición de información basados en mecanismos peer-to-peer (P2P).

También son aplicables a los diferentes ámbitos de aplicación, ya sean cien-
tíficos (principalmente con computación en cluster, grid, o mediante hard-
ware de máquinas paralelas o supercomputación) o en ambientes
empresariales mediante diferentes arquitecturas por capas, y/o basadas en
componentes o invocación remota de objetos, mediante las diferentes ar-
quitecturas software empresariales.

La evolución de los sistemas distribuidos en los diferentes modelos arquitec-
turales ha creado un gran conjunto de posibilidades para la programación
concurrente, que ha hecho surgir un gran número de paradigmas de progra-
mación.

© FUOC • P07/M2106/02841

6

Programación concurrente

Entendiendo estos paradigmas como clases de algoritmos que nos permiten
solucionar diferentes problemas pero disponiendo de una misma estructura de
control o concepción base.

Cada uno de ellos está mejor o peor adaptado a los diferentes ambientes dis-
tribuidos y/o paralelos, o más o menos especializado en arquitecturas de siste-
ma concretas.

En este capítulo pretendemos observar los diferentes paradigmas, así como te-
ner los conceptos teóricos y prácticos de los diferentes ambientes de progra-
mación para los sistemas concurrentes (distribuidos y/o paralelos), así como
diferentes consideraciones de prestaciones a tener en cuenta en la implemen-
tación de las soluciones según los modelos arquitecturales, de interacción (co-
municaciones), o de paradigmas de programación utilizados.

Un objetivo en especial es examinar las diferentes técnicas utilizadas en los di-
ferentes ambientes distribuidos, ya sean computaciones de tipo distribuida,
paralela, o grid. Daremos detalles, pero no entraremos en el debate, que no dis-
pone de amplio consenso en la comunidad científica, sobre las diferencias de
cada tipo de computación, distribuida, paralela, grid, o de memoria comparti-
da (shared memory). Ya que hoy en día cada vez se difuminan más las diferen-
cias, y en muchos casos la construcción de un sistema distribuido (y/o
paralelo) conlleva el uso de uno o más modelos de computación, llevándonos
a modelos híbridos dependiendo del ámbito de la aplicación.

En este sentido, consideramos la programación de tipo multithread, paralela y
distribuida, como el ámbito de estudio del presente modulo, para proporcio-
nar bases para el diseño e implementación de las aplicaciones dentro del ám-
bito de los sistemas distribuidos.

© FUOC • P07/M2106/02841

7

Programación concurrente

Objetivos

Los objetivos que tiene que conseguir el estudiante en este modulo didáctico
son los siguientes:

1. Conocer los conceptos básicos de la programación concurrente, distribuida

y paralela.

2. Conoce
  • Links de descarga
http://lwp-l.com/pdf11226

Comentarios de: Programación concurrente (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad