From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Jorge Niedbalski <niedbalski(at)gmail(dot)com> |
Cc: | Teofilo Oviedo <teus79(at)active(dot)com(dot)py>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Programación en C |
Date: | 2007-07-19 00:32:18 |
Message-ID: | 20070719003218.GM6651@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Jorge Niedbalski escribió:
> Teofilo Oviedo wrote:
> > Tengo un sistema hecho en C que debe quedar arriba durante las 24 hs.
> > Y cada tres segundos entra en un bucle hecho en un while donde se
> > consulta por medio de un SELECT si hay registros nuevos que procesar.
> > Una vez que se haya verificado o procesado el/los registros se vuelve al
> > bucle.
> Primero piensa en migrar a una arquitectura de multihilos para controlar
> los procesos concurrentes sobretodo si hablas de alto rendimiento, en
> relacion a los sockets te recomendaria pensar en una solucion de
> multiplexacion de los fd , puedes ver una libreria que lo hace muy bien
> para el caso del servidor aqui
> (http://nets.cl/public/sources/mplx2_02_2007.tar.gz) que usa eventos con
> poll y select, te puede ayudar...
Hmm, eso no necesariamente es buena idea con Postgres, porque no se
puede mezclar una conexion con varios "lectores". Solo podrias
compartir una conexion hacia Postgres cuando este "ociosa", es decir,
ningun otro thread debe estar enviando una consulta o esperando un
resultado.
Lo mas sano es que cada proceso (o thread) mantenga su conexion por
separado. De lo contrario es super dificil sincronizarlos
correctamente; y cuando lo logras, el rendimiento es malo porque tienes
que serializar el uso de la conexion.
Ahora si tuvieras MUCHOS (llamemoslo N) threads quizas valdria la pena
tener VARIOS (llamemoslo M) conexiones, con M << N, y compartir las
conexiones entre los procesos (siempre y cuando te asegures de dejar la
conexion en un estado "limpio" despues de cada uso, es decir fuera de
toda transaccion, etc). Pero creo que es dificil de hacer y
probablemente lleno de bugs. Si realmente llegaras a necesitar eso,
lo que yo haria seria tratar las conexiones normalmente en la aplicacion
(es decir una por thread) y usar un pooler intermedio, como PgPool o el
pooler de Skype (cuyo nombre se me escapa).
--
Alvaro Herrera http://www.flickr.com/photos/alvherre/
"Porque francamente, si para saber manejarse a uno mismo hubiera que
rendir examen... ¿Quién es el machito que tendría carnet?" (Mafalda)
From | Date | Subject | |
---|---|---|---|
Next Message | Jorge Niedbalski | 2007-07-19 00:44:45 | Re: Programación en C |
Previous Message | Jorge Niedbalski | 2007-07-19 00:15:47 | Re: Programación en C |