Categorías: Programacion

Programacion paralela en C : Inicio

En esta serie de entradas que hoy empezamos, nos vamos a enfocar en la programación de sucesos paralelos en C. Este tipo de programación implica conocer una serie de conceptos especiales y saber cómo funcionan como los semáforos.

Programación paralela

La decisión de utilizar programación paralela parte de la base de que muchas veces queremos agilizar nuestros cálculos y para ello queremos usar todo el potencial de nuestra CPU. Actualmente seguramente muchos tendremos una CPU con varios núcleos, así que por qué no utilizarlos todos para agilizar los cálculos. Por ejemplo si queremos sumar (por fuerza bruta) el primer millón de números, tardaremos menos si distribuimos la carga entre varios núcleos que si hay que realizarlo todo de manera secuencial.

Conceptos de programación paralela

Básicamente hay dos maneras de realizar la programación paralela, mediante hilos o mediante procesos:

  • Todos los hilos comparten los recursos, es decir si nosotros cambiamos con un hilo el valor de una posición de memoria, ese valor nuevo lo tendrán el resto de hilos.
  • Todos los procesos realizan una copia de los recursos del proceso padre, especialmente de su memoria y sus variables. En este caso un valor que cambiemos en un proceso no tiene repercusión en otro proceso, son entornos totalmente aislados.

Compartición de datos

Una de las primeras preguntas que uno se hace al escuchar cómo los procesos son totalmente aislados, es cómo se realiza la compartición de datos. En este caso también encontramos dos técnicas básicamente:

  • Memoria compartida: en este caso se utiliza una zona de memoria principal declarada de una manera especial, para que todos los procesos puedan acceder a ella.
  • Paso de mensajes: cada proceso tiene un identificador y mediante el sistema operativo y su identificador le podemos mandar mensajes.

Primeros pasos en la programación paralela en Linux

En el caso de Linux hay una llamada al sistema denominada fork que permite duplicar nuestro proceso y de esta manera se puede empezar a realizar programas multiproceso.
En este programa de ejemplo que os adjuntamos podéis ver como se crean 2 ficheros, uno por parte del hijo y otro por parte del padre. Además si quitas los comentarios podrás ver (con top, ps etc) como tienes 2 procesos con el nombre de tu ejecutable.

#include 
#include 

int main(){
    
    int pid; //ID del proceso
    FILE *fichero;
    puts("Este es un programa de ejemplo de programa multiproceso");
    
    pid = fork();
    switch(pid){
        case -1:
            fprintf(stderr,"Error al hacer fork");
        break;
        case 0:
            fichero = fopen("hijo.txt","w");
            fprintf(fichero,"Hola soy el hijo");
            fclose(fichero);
            /*while(1==1) {
                 
             }*/ 
        break;
        default:
            fichero = fopen("padre.txt","w");
            fprintf(fichero,"Hola soy el padre y mi hijo tiene el pid %d",pid);
            fclose(fichero);
            /*while(1==1) {
                 
             }*/ 
        break;      
    }   
    return 0;
}
Jorge Durán

Entusiasta de la tecnología desde los 10 años, desarrollador y creador de varios proyectos de software y autodidacta por naturaleza. Ingeniero Informático por la USAL y .Net backend developer en idealista.

Share
Publicado por
Jorge Durán

Recent Posts

Docker: conceptos principales y tutorial paso a paso

Hoy queremos hablaros de Docker un proyecto que cada día es más usado, porque permite…

3 años hace

Crea diagramas rápidamente usando código

Cada vez estamos más acostumbrados a usar código para generar la infraestructura (IaC), documentar nuestro…

3 años hace

Procesamiento del lenguaje natural con ElasticSearch

Uno de los problemas que se presentan con una mayor frecuencia hoy en día, es…

4 años hace

Elige tecnología clásica y aburrida

Uno de los problemas que solemos tener los programadores, es que nos gusta estar a…

4 años hace

Cómo usar Docker en Windows

Docker es una de las herramientas más usadas por los desarrolladores, sin embargo, usarlo en…

4 años hace

Analiza el coste del uso de JavaScript

Como seguramente sabrás el uso de JavaScript ha crecido exponencialmente en los últimos tiempos, sin…

5 años hace