andy0013 / TP2

TP2 Hilos
0 stars 0 forks source link

Respuesta a las preguntas del enunciado #1

Closed fedemgp closed 2 years ago

fedemgp commented 3 years ago

Pregunta: considerando el dominio del problema mencionado, y ademas, sabiendo que cada analisis que se solicite sera distinto, pero no es probable que se soliciten mas de 100 peticiones, seria posible cargar en una cola TODAS las peticiones, y luego ejecutarlas una a una, logicamente con el orden de una cola?

No, no se puede cargar todas las particiones en memoria. Es parte del problema a solucionar esto, dado a que podrías tener infinitos request. Deberías ir leyendo de a un request por entrada estandar, e ir pasandolé particiones a los workers (no podés tener mas de N particiones en memoria). Todas estas imposiciones se podrían resolver implementando una cola bloqueante, y sería mas facil usando una BoundedQueue. Esta cola es una cola bloqueante, pero que además de bloquear el pop, bloquea el push si se llega a la condición de que hay N elementos en la cola. Para implementar esta cola, necesitás dos conditional variables.

fedemgp commented 3 years ago

Pregunta: En mi caso actual leo una Particion a la vez, cuando se agrege Hilos deberia leer N particiones dependiendo de cantidad de hilos a usar, luego dispararlos en simultaneo, y una vez terminaron el procesamiento repetir continuamente. Pero, puedo reutilizar mi estrucutra actual de ir combinando por lectura los datos?, o deberia hacer como se sugiere en el enunciado que el Hilo principal detecte que se finalizo de leer particiones y hacer el combine de todo junto?

El enunciado dice que compartas un objeto entre los workers que albergue el resultado final (será el que va a haciendo el combine. El hilo main no necesitaría saber que el worker terminó de procesar la partición.

fedemgp commented 3 years ago

Se realizaron varias entregas, por una razon que aun desconozco, no me es posible ejecutar el CPP desde mi local con el Bash, tiene que ver con una cuestion de python que desconozco como destrabar. Por esta razon, varias de las entregas se repitieron para ir eliminando estos errores de espacios, lineas mayores a 80 caracteres, etc.

El linter? en el chat de discord se explicó como ejecutarlo

fedemgp commented 3 years ago

Sin embargo, quedo pendiente por solucionar un mensaje que no me fue sencillo interpretar:

El linter te dice que debería implementar un constructor copia de tus clases porque estas clases tienen atributos que apuntan a elementos del heap. El problema radica en que estás allocando TODO en el heap, y no es necesario en lo absoluto. De lo que hiciste hasta ahora, el unico lugar donde se justifica tener las instancias en el heap es en el strategy que aplica polimorfismo de las operaciones. El resto de las clases no deberían tener ningún atributo en el heap. Cuando agregues los hilos, recomiendo lo albergues en un vector de puntero a threads, y que los alloques en el heap. Esto se debe a que el objeto std::thread no debería ser movido porque podría ocurrirte una Race condition.