Tengo un enorme archivo de texto separado por líneas y quiero hacer algunos cálculos en cada línea. Necesito hacer un programa multiproceso para procesarlo porque es el procesamiento de cada línea el que toma más tiempo para completar en lugar de leer cada línea. (El cuello de botella está en el procesamiento de la CPU, en lugar de la IO)Acceso muti-threaded al mismo archivo de texto
Hay dos opciones que se me ocurrió:
1) abrir el archivo desde el hilo principal, cree un bloqueo en el identificador de archivo y pasar el file handle alrededor de los subprocesos de trabajo y luego deje que cada trabajador lea: acceda directamente al archivo
2) Cree una configuración de productor/consumidor donde solo el subproceso principal tenga acceso de lectura directa al archivo y las líneas de cada subproceso de trabajo utilizando una cola compartida
Lo que se debe saber:
- Estoy muy interesado en el rendimiento de velocidad para esta tarea
- Cada línea es independiente
- estoy trabajando esto en C++, pero supongo que la cuestión aquí es un poco independiente del lenguaje
Qué opción elegirías y por qué?
¿cuántos procesadores usará y qué tan grande es el archivo? – amit
el archivo es de alrededor de 20 GB y en futuras implementaciones será aún mayor. Actualmente me estoy ejecutando en 4 núcleos – Alexandros
@Alexandros: Sé que soy bastante tarde para responder :). Pero ¿no sería mucho más fácil asignar un bloque de líneas a cada hilo? Puede precalcular el tamaño de bloques para cada subproceso con un único puntero de archivo y luego, cada subproceso abrir el archivo y buscar esa posición pre calculada. Creo que este será un enfoque más fácil y rápido – Arunmu