Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/05/2010, 15:31
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Multiples objetos de conexion a la base de datos

Recuerda que PHP es un lenguaje que se procesa en el servidor, y por ende esta "atado" al web server que lo maneje. A lo que voy con esto es que por cada request por lo general, el Web Server crea un thread independiente para manejar ese request, ese thread es el encargado de invocar el motor de PHP y ejecutar tu script PHP.

Entendiendo esto, puedes ver que cada script PHP se ejecuta en un ambiente aislado de otro thread, entonces las variables no se comparten, cada una esta en un espacio de memoria diferente.

Ahora, las bases de datos funcionan en un ambiente similar, ya que por lo general se conectan via TCP, tienen un "pool" de conexiones abiertas, y no importa que tu uses mysql_close o pg_close esto solo hace que marca la conexion como inactiva y es "cerrada" despues de un timeout.

Cuando tu desde PHP haces un request a un motor de BDD, este mira en su pool de conexiones para ver si tiene una conexion con el mismo user, mismo password y te regresa esa conexion, esto lo hace para ser mas optimo y no ocupar tanta memoria.

Entendiendo estos ambitos puedes ver que aunque desde PHP si entran 100 personas, te va a crear 100 objetos diferentes (cada uno en su espacio de memoria) pero puede que no sean 100 conexiones diferentes, ya que el manejador de la base de datos va a tratar de optimizar lo mas posible ese gasto de recursos, aunque como puedes ver las funciones pg_connect y mysql_connect pueden forzar el crear una conexion nueva, pero es tarea del motor de base de datos el seguir esto o reciclar una conexion.

Saludos.