|
From: CaStarCo <cas...@gm...> - 2009-12-09 21:15:28
|
Experimentando con la cache he visto que no da tan buenos resultados como sería deseable por las siguientes razones: · Dado que Tabularium és un programa multiproceso (y no multihilo), los procesos están prácticamente incomunicados y no tienen áreas de memoria compartida (habría que usar algo más avanzado como MPI... pero creo que eso sería complicar demasiado las cosas). Nginx funciona de manera que va rotando los procesos que se encargan de servir las páginas a los usuarios (con el algoritmo Round Robin) y puede pasar que se tenga que rellenar la caché tantas veces como procesos haya por cada usuario (una vez por cada proceso a cada actualización, siempre que se el proceso que sirva al usuario X no le haya servido nada antes). Supongo que utilizar una cache en memoria puede ser muy útil para ciertas cosas, pero por lo que respecta a almacenar cadenas cortas de texto (que es lo que hize en el experimento), acaba siendo una complicación innecesaria que prácticamente no aporta una mejora de rendimiento sustancial frente al incremento del consumo de memoria. Para postres, cuando el usuario actualiza sus preferencias puede tener problemas ya que si ha rellenado las caches de varis procesos, no las actualiza todas (solo la del proceso que estaba funcionando en el momento del cambio de preferencias), por lo que a cada actualización o cambio de página podrá ver como sus preferencias se alternan entre sus preferencias antiguas y las configuradas recientemente. Para solucionar eso solo hay una medida: purgar las caches cada cierto tiempo... pero es puede eliminar los beneficios de ésta. Conclusión: eliminaré el sistema de cache (por el momento), por ahora ha servido para experimentar, conocer los problemas inherentes a esta forma de proceder y poder aplicar lo aprendido a nuevos intentos que tengan más interés que el simple sistema de estilos. Otra conclusión es que sería interesante estudiar el funcionamiento de sistemas como MPI o funciones como mmap que permiten mapear ficheros en memoria para usarlos a modo de canales de transmisión de información para comunicar procesos. (Como las pipes, pero de acceso aleatorio en vez de ser colas) Para finalizar, mis disculpas por transformar el desarrollo de tabularium en un campo de experimentación y hacer que tarde el doble de lo necesario, pero realmente me gustaría conseguir un software que pueda comportarse de forma ejemplar ante cargas de trabajo descomunales. El día 9 de diciembre de 2009 12:12, CaStarCo <cas...@gm...> escribió: > Bién, he añadido el sistema de estilos. Hay un estilo por defecto y > cada usuario puede escoger su estilo (bién, no tienen ningun menú > todavía pero ya está implementado el mecanismo y funciona > correctamente). De hecho he creado una pequeña cache en memoria que > almacena las preferencias de estilo de cada usuario con una marca de > tiempo para evitar hacer demasiados accesos a la base de datos.. (que > sí, ya sé que tiene también una cache en memoria pero no podemos estar > seguros de que siempre la vaya a usar). > > Nota: recomiendo crear una rama aparte cada vez que estemos > desarrollando o haciendo cambios en el repositorio, luego si acaso > hacemos un merge :p , lo digo porque me he encontrado con problemas > para subir mis cambios pues no tenía actualizado el repositorio y > Muammar ha hecho cambios mientras tanto jejeje (en todo caso ya está > arreglado). > > -- > - Per la llibertat del coneixement - > - Per la llibertat de la ment... - > -- - Per la llibertat del coneixement - - Per la llibertat de la ment... - |