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
_______________________________________________
Madrid-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/madrid-pm