escuela

Páginas: 6 (1422 palabras) Publicado: 23 de octubre de 2014
Introducción al multiprocesamiento en C++

El multiprocesamiento es una característica de la programación de sistemas imprescindible hoy en día, y aunque existen mecanismos alternativos a la creación de hilos de ejecución para ciertas tareas como las llamadas al sistema para operaciones de Entrada/Salida que pueden ser ejecutadas de forma asíncrona con IOCP en Windows, EPOLL en Linuxy KQUEUE en otros Unix, el multiprocesamiento puede ofrecernos muchas ventajas sobre todo con los procesadores multi núcleo de los que hoy disponemos.
Como no podía ser de otra manera, y para ponernos las cosas más difíciles, UNIX y Windows implementan su paquete de subprocesos y su API de forma diferente. Existen algunas diferencias a nivel de implementación entre una y otra de las que no voy a hablar enesta Introducción al mutiprocesamiento en C++ pues sobrepasa el objeto de esta entrada.
Linux, al igual que otros UNIX, implementa el paquete de subprocesos POSIX 1003.1c estandarizada por el IEEE como parte de los estándares POSIX. Los subprocesos POSIX se conocen comúnmente como pthreads y en Linux podemos referirnos a ellos como Native POSIX Threads Library (NPTL) o pthreads de formaindistinta, estamos hablando del mismo paquete.
¿Qué es el multiprocesamiento?
El multiprocesamiento o multihilo o por su nombre en Inglés multithreading, es la habilidad de un sistema informático de ejecutar más de un hilo de ejecución a la vez. En una máquina moderna, el procesador no ejecuta los procesos de forma secuencial sino que cambia de contexto (de proceso o hilo) ejecuta unas pocasinstrucciones, y vuelve a cambiar de contexto repitiendo ese ciclo demanera infinita.
Esto nos da la sensación de que la máquina está ejecutando muchos procesos en paralelo pero eso es una falacia, en realidad, el procesador solo puede ejecutar un proceso a la vez. En el caso de procesadores con varios núcleos, el procesador puede ejecutar tantos procesos o hilos en paralelo como núcleos disponga y cadanúcleo trabaja de la misma forma.
El ThreadUn thread es básicamente una sección de código independiente que el procesador puede ejecutar de forma concurrente junto a otros threads o hilos de ejecución. En Linux y otros UNIX un thread se define como un contexto de ejecución mientras que Windows define un thread como algo separado de un proceso.
Siempre que ejecutamos una aplicación, se creaun thread llamado el main thread, desde él, se pueden crear nuevos threads que ejecuten otras partes del código de nuestra aplicación en paraleloo que escuchen en un socket o cualquier otra cosa que se nos ocurra y necesitemos.
Los threads deben interactuar entre si, por lo tanto es necesario implementar mecanismos decomunicación y sincronización pues la memoria de los mismos se comparte entre todos ellospor igual y todos ellos tienen acceso al mismo segmento de memoria en cualquier momento por lo que la integridad de los datos puede verse comprometida si no usamos primitivas de sincronización.
Sincronización
El problema principal con el multiprocesamiento es sin duda la sincronización. Por ejemplo, podemos tener definido un buffer de 128 bytes y decirle al main thread que el buffer está listopara su lectura. Pero, ¿qué pasa si otro thread comienza a reescribir el buffer mientras el main thread está aún leyendo del buffer?. El buffer será sobreescrito por el segundo thread y como consecuencia nuestra aplicación estará leyendo datos incorrectos lo que provocará en el mejor de los casos la segmentación de la misma y en el peor errores arbitrarios y difíciles de depurar.
A este tipo deproblemas se les suele llamar secciones críticas. Por lo tanto se hace necesario un mecanismo de sincronización de threads que permita acceder a las variables compartidas por varios hilos de ejecución de forma segura, las primitivas de sincronización.
MutexUn mutex (que proviene del Inglés mutual exclusion) es la primitiva de sincronización disponible más simple (y más efectiva casi siempre)....
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Escuela
  • Escuela
  • Escuela
  • La escuelas
  • Escuela
  • Escuela
  • Escuela
  • Escuela

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS