Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Es posible simular el syncronized de Java con PHP?

Estas en el tema de Es posible simular el syncronized de Java con PHP? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, es posible simular de alguna manera el syncronized de Java? Es decir, conseguir que se ejecute un método de un objeto de forma única. ...
  #1 (permalink)  
Antiguo 21/08/2005, 14:00
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Es posible simular el syncronized de Java con PHP?

Hola,
es posible simular de alguna manera el syncronized de Java? Es decir, conseguir que se ejecute un método de un objeto de forma única.

Gracias.
  #2 (permalink)  
Antiguo 12/09/2005, 12:47
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
si nos das mas detalles sobre lo que necesitas hacer será más fácil la discusión. Con la poca información que proporcionas me atrevo a decirte que NO. PHP no soporta threading, por lo tanto no es útil syncronized de Java. Sin embargo es posible utilizar la extensión de Java para php, de tal forma que los threads los creas desde php, pero a fin de cuentas son creados por Java. Sin embargo no estoy seguro de que puedas utilizar el bloque synchronized{} de Java desde php. Con mas detalles tal vez se nos pueda ocurrir algo.

saludos
  #3 (permalink)  
Antiguo 12/09/2005, 13:02
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Quiero ejecutar cierto código dentro de un "sincronized", tal y como se hace en Java y quería saber si eso era posible.

Gracias por el interés.
  #4 (permalink)  
Antiguo 15/09/2005, 11:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Hola dominguez para ejecutar un método de un objeto de forma única, lo que yo entiendo es un método estático por ejemplo en PHP5

<?php

class Prueba {
static function saludar() {
print "Hola gente!";
}
}


Prueba::saludar();

?>

Como sabes las funciones o métodos estáticos serán iguales para todos los objetos.

Si lo que quieres es tener una instancia de un solo objeto entonces puedes aplicar el patrón de diseó más fácil y más famoso el Singleton.
Por ejemplo:
<?php


class Singleton {
static private $instance = NULL;

private function __construct() {
}

static public function getInstance() {
if (self::$instance == NULL) {
self::$instance = new Singleton();
}
return self::$instance;
}
}


$Objeto1 = Singleton::getInstance();
$Objeto2 = Singleton::getInstance();

?>

El primer objeto llamará a la instancia que creará el objeto singleton
el segundo objeto llamará a la misma instancia y al comprobar q el objeto está creado retornará la referencia al mismo objeto singleton.

Más claro esta es una forma de obtener una sola creacion de un objeto por ejemplo es útil para asegurarnos que solo tenemos una conexion de base de datos abierta.
  #5 (permalink)  
Antiguo 15/09/2005, 12:01
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Hola,

no, eso no es exactamente lo que quiero. Lo que quería saber es si era posible realizar la ejecución única de un método, es decir, que sólo se está ejecutando una sola vez, aunque haya 1000 objetos llamando al método.

Un ejemplo es el "syncronized" de Java, que nos asegura que sólo hay un objeto ejecutando el código que encierra.

Un saludo.
  #6 (permalink)  
Antiguo 15/09/2005, 13:28
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Pregunta

Bueno si quieres utilizar threading (aunque no se bien para que...) tendrías de dar algo más de información, puedes utilizar las funciones de (Semaphore, Shared Memory and IPC Functions ) que para mi entender son igual de duras que las de Unix aquellas famosas practicas tediosas de memoria semaforos y fork nunca más jajaja

En el manual de php encontraras las referencias para System V

php threads

es la página en inglés aunque creo que encontrarás la versión en castellano también.
  #7 (permalink)  
Antiguo 15/09/2005, 15:17
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
En que casos es recomendable usar threading??
  #8 (permalink)  
Antiguo 15/09/2005, 18:43
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
Cita:
Iniciado por dominguez
Quiero ejecutar cierto código dentro de un "sincronized", tal y como se hace en Java y quería saber si eso era posible.

Gracias por el interés.
eso se puede apreciar en tu post inicial, mi pregunta va orientada a con que objetivo deseas utilizar un synchronized{}, eso es útil unicamente cuando manejas threads, cosa que php no hace. Un thread es útil, entre otras cosas, cuando deseas ejecutar tareas en paralelo.

Por ejemplo, multiples clientes conectandose a una interfaz de linea de comandos (CLI) por sockets de UNIX.
  #9 (permalink)  
Antiguo 16/09/2005, 12:03
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Tengo un método:

public static function getUid()
{
...
}

que lo que hace es obtener un UUID (Identificador único) y pensé que este método debería ser "syncronized" para no dar la posibilidad de que se genere el mismo UUID.

Pero si el "syncronized" sólo tiene sentido con threads, entonces no lo puedo utilizar no?

Gracias por el interés.
  #10 (permalink)  
Antiguo 17/09/2005, 08:01
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
correcto. en tu caso puedes por ejemplo, usar un archivo o base de datos para almacenar el siguiente UID, y "lock"ear el archivo para que no se pueda acceder hasta que un mismo proceso termine de leerlo y escribirlo. Sería perfectamente equivalente para synchronized. Incluso puedes crear un archivo con código php que luego evaluas con eval() para simular de una manera un tanto primitiva y menos eficiente un synchronized.

saludos
  #11 (permalink)  
Antiguo 30/09/2005, 16:50
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 7 meses
Puntos: 0
Una variante, si solo ....

Hola :

Si solamente necesitaras obtener un UID por ejecucion pudieras utilizar los ID generados por PHP para identificar las sessiones; el mismo PHP te garantiza que no se repetira. A lo mejor es tu caso.

Ahora, si necesitaras generar diferentes UID por cada ejecucion, varios en una misma ejecucion entonces necesitaras acudir codigo de exclusion mutua, semaforos, etc...; ya sea utilizando una base de datos ( que implementa uno claro esta ), utilizando locks o implementando tu mismo un semaforo.

Saludos
__________________
Alojamiento Web - Alojamiento web y Servidores dedicados. Servidores en USA y Londres.
Hosting,PHP,Java,CSS,SEO BLOG - Web Hosting, Posicionamiento Web, Programacion en PHP, Java, CSS y mucho mas.
  #12 (permalink)  
Antiguo 03/11/2005, 14:52
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 2
El uso de Threading, esta dentro del ámbito de los ambientes multiprogramados, es decir en ambientes donde varios elementos intentan acceder al mismo recurso, y en donde un planificador administra la posesión de esos recursos, como es el caso de los sistemas operativos donde un programa crea un proceso y el uso de recursos es otorgado por el planificador que permite coordinar el acceso a disco duro, memoria, y demás dispositivos además del tiempo de procesamiento, ahora los threading no son del todo lo mismo que los procesos, pero ese es otro tema.
Si tu aplicación es vía HTTP, no es necesario que que los uses el HTTP descarga archivos y cada petición a un que parezca inmediata no es simultanea es decir que cada petición esta encolada para ser despachada así que las posibilidades de que varios clientes invoquen el método al mismo tiempo son mínimas, ahora si a un así quieres hacerlo con la idea que propone sism82 debe de funcionar yo aplicaría la de base de datos. ya que las consultas también son encoladas, no son simultaneas así que puedes hacer un secuenciador para crear tu ID y bueno cada consulta obtendrá un ID único
__________________
Saludos!
Mty-NL..
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:50.