Mostrando entradas con la etiqueta paralelo. Mostrar todas las entradas
Mostrando entradas con la etiqueta paralelo. Mostrar todas las entradas

miércoles, 5 de mayo de 2010

Pensando en paralelo

Edit (3 meses despues...): Que fallo mas tonto!, me olvide de colgar la implementación de la lista enlazada :(, está aquí [llist.c]

Entre los paradigmas de programacion en paralelo, destacan el multiproceso (varios procesos, un hilo para cada uno), y el multihilo (un solo proceso, varios hilos de ejecucion), la principal diferencia es que si un programa es multiproceso, la memoria (la RAM) no es compartida, esto hace que no haya que preocuparse de cuando se accede a los datos, o se modifican, para evitar que otras instancias del programa fallen, pero hace obligatorio el uso de IPC (Comunicacion Entre Procesos) para coordinar el programa.

Asi, con el multihilo el IPC se puede reemplazar por cosas como variables globales, ademas por no necesitar una region de memoria propia, es bastante mas ligero, aun asi, elijas el modelo que elijas, siempre tendras el mismo problema, que se puede resumir en

-¿Por que cruzo la gallina paralela la calle?
-cruzar la calle Para

-¿Por que cruzo la gallina paralela la calle?
-Para calle la cruzar


Que se quiere decir con esto?, que la programacion en paralelo implica que mucho codigo se va a invertir en coordinar el programa... y bueno, a quien le guste esa parte, pues bien, pero a quien no...


Esta presentacion tan... cutre , era para mostrar un pequeño codigo (aunque aun esta bastante verde) que pretende simplificar el uso de programas multihilo sobre listas de palabras, por ejemplo:

#include "thread_launcher.h"
#include <stdio.h>
#include <stdlib.h>

void print(char *s){

    printf("%s\n",s);
}

int main(int argc,char **argv){

    if (argc<2){
        printf("Uso: ./sample <nombre del archivo>\n");

        return 1;
    }
    FILE *f=fopen(argv[1],"r");

    if (f==NULL){
        printf("No se ha podido leer el archivo %s\n",argv[1]);

        return 2;
    }
    launch_threads(2, print, f);

    fclose(f);
    return 0;
}

Lo unico que hay que hacer (aparte de añadir -lpthread al compilar y importar el codigo), es abrir un archivo, y usar la funcion:

launch_threads(<Numero de hilos>, <Funcion que se llamara>, <Archivo que se lee>);

[ThreadLauncher.zip]

ps: el codigo esta acabado, pero no demasiado probado... aviso...


Hasta otra!