[Madrid-pm] perl threads

Joaquín Ferrero explorer en joaquinferrero.com
Mie Oct 13 13:52:55 PDT 2010


El 13/10/10 20:59, mipassa escribió:
> Hola,
>
> Mi pega es que mientras que con perl lanzo 10 procesos (por poner un número)
> para hacer 10 "cosas" en un intervalo de tiempo, aprovechando al máximo los
> recursos de la máquina, para ese mismo periodo con Java en esa misma
> máquina, me creo que puedo lanzar 100K threads que me hacen 100mil "cosas"
> :(

¿Cien mil "cosas"?

¿Es que, acaso, tienes, "cien mil" núcleos de procesador?

¿Qué sentido tiene arrancar un montón de threads si tienen que esperarse unos a otros para que les atienda el procesador?

Al final, con tanto cambio de contexto, tienes menos rendimiento que si lo hicieras de forma secuencial.

Yo, como máximo, monté un "cluster" que sumaba 32Gb, 8 procesadores con dos núcleos cada uno, así que, por mucho que yo quisiera, nunca habría más de 16 procesos activos de forma simultánea (y uno de ellos, al menos, atendiendo al sistema operativo).

Mi problema era procesar ficheros muy grandes, que, de forma normal (en un solo procesador), tardaba 100 minutos. Pero como el problema se podía dividir, lo hice en 16 partes cada uno. Al final, el tiempo final no era exactamente 1/16, sino mayor, algo así como 1/10 del tiempo inicial.

usé Parallel::ForkManager;  # nada más, algo muy sencillo

En los problemas en los cuales hay "cien mil" elementos, queda muy bonito modelizar el problema en torno a objetos que tienen su "vida propia" (estoy pensando en los MMORPG), pero eso mismo se puedo hacer de otras formas, que reparta mejor la carga entre los procesadores disponibles.

IMO, por supuesto.

-- 
JF^D


Más información sobre la lista de distribución Madrid-pm