Notas de Computación Concurrente

Sod hiols on sincronizaos rtartaorn ed escbirir seto

Curso de octavo semestre de la licenciatura en Ciencias de la Computación (plan 2013). El contenido es sobre los problemas teóricos que se suponen que dos computadoras de alguna naturaleza, comparten memoria de alguna forma, para exhibir que esto puede resultar en problemas a raíz de problemas no esperados. Se estudian técnicas, herramientas y estrategias mediante las cuales podemos diseñar nuestras soluciones a problemas de concurrencia.

Así con esta pequeña introducción dada, va una lista de las notas que he elaborado para este curso:

Ejercicios con el algoritmo de sincronización de Peterson

Dando por hecho que el lector conoce el algoritmo de Peterson, las notas exponen ejercicios para mostrar el uso y utilidad del mismo.

Hilos de ejecución y calendarización de procesos

Estas notas, exponen de forma detallada conceptos propios de sistemas operativos; que son fundamentales para el entendimiento de conceptos y eventos de la computación concurrente.

Exclusión mutua

Ya entrados en terreno, lo que exponen estas notas son más definiciones, pero ahora sí más propiamente en el terreno de la computación concurrente.

Algoritmo de sincronización de Kessels

En estas notas, se explica qué es, cómo funciona y en qué casos podemos usar el algoritmo de sincronización de Kessels.
Historico de versiones de estas notas: Agosto de 2015 - Incluye una introducción al algoritmo del torneo

Algoritmo de la panadería

Sin salir del terreno de la sincronización, en estas notas expongo el algoritmo de la repostería o panadería... Aunque siendo natal de Ciudad de México, me gusta más llamarle "el algoritmo de la papelería del centro"... Verán porqué.

Primitivas de sincronización

En estas notas, describo en una larga lista varias primitivas de sincronización, también llamadas "objetos". Pero ojo, este no es el mismo concepto de objeto que se usa en programación orientada a objetos.

Aplicaciciones de primitivas de sincronización

En la misma línea que las notas anteriores, estas hablan sobre aplicaciones de primitivas de sincronización.

Colas concurrentes, semáforos y moitores

En estas notas, explico qué son y cómo se usan los semáforos y monitores.

Problema de los filósofos comensales

En estas notas, trato el problema de los filósofos comensales: qué es y una "posible" forma de resolverlo.

Solución al problema de los filósofos comensales mediante apropiamiento y espera

En la misma línea de las notas anteriores, se extiende el problema de los filósofos comensales, pero esta vez se propone una solución real.

Problema de los fumadores de tabaco

En estas notas, se aborda y explica el problema de los fumadores.

Problema del barbero dormilón

En estas notas, se aborda y explica el problema del barbero dormilón.

Soluciones al problema del consenso

En estas notas, se da por hecho que el lector ya conoce el problema del consenso y se plantean varias formas de resolverlo.

Ejemplos de soluciones al consenso

Siguiendo la misma línea de las últimas notas, se presentan ejemplos de resoluciones al problema del consenso.

Ejemplos en Java y C solución al problema del consenso

En un último ejemplo, se muestran implementaciones en Java y C para resolver el problema del consenso.
Las notas tienen el siguiente anexo: Código de los ejemplos

Intoducción a las GUI

Una aplicación de la computación concurrente, está en el lado técnico del desarrollo de interfaces gráficas de usaurio. Cuando se trata de aplicaciones que reflejan cambios hechos por un solo usuario, como la mayoría de los editores de texto o por un solo hilo/proceso, no hay mucho problema en cuanto a la concurrencia. Los verdaderos retos empiezan a aparecer cuando la aplciación se hace de varios hilos trabajadores de segundo plano para tareas como obtener cada uno cierta información a partir de un servidor, realizar cáluclos intensivos etc.
Esta aplicación; como podrán adivinar los clientes frecuentes, es una de mis favoritas, ya que nos conlleva casi inebitablemente a la programación de videojuegos, donde tener que animar a personajes manipulados por la entrada de los jugdores, otros por la IA, otros por las reglas del juego; como las simulaciones físicas; etc. Involucran muchos hilos/procesos manipulando el mismo videojuego: la concrrencia se pone divertida en más de un sentido.
Las notas tienen el siguiente anexo: Ejemplo de aplicación gáficas en Java Swing

Hilos de ejecución en Java

Conforme nuestros proyectos y diseños crecen, es común que sea necesario trabajar a varios hilos. Un proceso (informalmente, un programa en ejecución) puede ejecutar tantas instrucciones "simultáneas" como sea necesario. La capacidad de paralelización de un programa está limitada únicamente por la capacidad física de la máquina que ejecute el programa.
Sin embargo, por muy maravilloso que esto suene, no es un panorama claro y hermoso del todo. Ya que es muy posible que el comportamiento de nuestro programa dependa de cuando se manipulan los varios hilos con los recursos compartidos. Es aquí cuando vamos a empezar a lidiar con condiciones de carrera o competencia y tener que implementar estrategias de sincronización, como las que se mencionan en los puntos anteriores: implementar hilos es solo la primera parte.
Las notas tienen el siguiente anexo: Ejemplo con hilos
También hacen referencia al ejemplo de calendarización mencionado en la sección de notas para Estructuras de datos.

Colas concurrentes

Describe qué son y cómo implementar colas concurrentes.

Herramientas de concurrencia en Java

En estas notas, describo a grandes rasgos cuáles son y cómo se usan las clases del paquete estándar de Java java.util.concurrent. Se pone énfasis en los semáforos.

Herramientas de concurrencia y sincronización en Python

De manera similar y análoga a las notas sobre concurrencia con Java, se estudian las herramientas estandar que ofrece Python para resolver problemas de concurrencia. Se exploran las bibliotecas que nos permiten implementar las soluciones estudiadas en el curso en esta plataforma interpretada y favorita de muchos.
Las nota tienen el siguiente anexo: Ejemplos de sincronización en Python

Herramientas de concurrencia y sincronización en C y C++

Análogo al caso anterior, en estas notas se presentan las herramientas "estándares" (esto depende un poco más de la plataforma anfitriona y/o el compilador utilizado) para resolver problemas de concurrencia en C y C++; para también poder implementar soluciones a problemas de concurrencia con esta plataforma nativa.
Las notas tienen el siguiente anexo: Ejemplos de sincronización en C y C++