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.
Tabla de contenidos
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.
Básicamente hay dos maneras de realizar la programación paralela, mediante hilos o mediante procesos:
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:
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;
}
Hoy queremos hablaros de Docker un proyecto que cada día es más usado, porque permite…
Cada vez estamos más acostumbrados a usar código para generar la infraestructura (IaC), documentar nuestro…
Uno de los problemas que se presentan con una mayor frecuencia hoy en día, es…
Uno de los problemas que solemos tener los programadores, es que nos gusta estar a…
Docker es una de las herramientas más usadas por los desarrolladores, sin embargo, usarlo en…
Como seguramente sabrás el uso de JavaScript ha crecido exponencialmente en los últimos tiempos, sin…