Foro de elhacker.net

Programación => Java => Mensaje iniciado por: reylagarto19 en 1 Agosto 2012, 01:52 am



Título: FORK en java
Publicado por: reylagarto19 en 1 Agosto 2012, 01:52 am
Me he estado leyendo las normas del foro, ya que he notado que a los post del tipo "SOS necesito que me hagais el trabajo porque soy un zote y no se hacerlo" no soleis responder mucho y efectivamente como era de preveer esta claro que aqui no venimos a hacerle el trabajo a nadie, sin embargo pone que "preguntas de DUDAS tecnicas" si las soleis resolver en función de su complejidad.

Bien, pues hay va mi pregunta, pues tengo una tremenda curiosidad de saber si es posible o no usar algo en JAVA que sea SIMILAR al FORK() de lenguaje C.

Pues resultaría interesante en muchas ocasiones poder darle un espacio PROPIO de memoria a un proceso, cosa que con los Threads no se puede, pues comparten memoria. (como veis la teoria me la se  ;-) ;-) )

pero tengo gran curiosidad por saber si esa opcion esta ya implementada en java o no.


Un saludo majetes ;)


Título: Re: FORK en java
Publicado por: egyware en 1 Agosto 2012, 02:32 am
No he visto algo parecido así en Java.
Buscando rápidamente en Google me tope algo así... tal vez te sirva
http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

Saludos!


Título: Re: FORK en java
Publicado por: reylagarto19 en 1 Agosto 2012, 03:15 am
perdon porque quizá no me he explicado bien desde un principio

la cosa es la siguiente:

Conozco la existencia de JDK 7, y de las clases que muestras en el enlace.
Mi duda era saber si alguno las habeis usado ya o si habeis trasteado con ellas para ver si me comentabais si eran equivalentes a un fork() de C.

Ademas otra duda que me surge, es si sabeis si el JDK 7 lo hay ya para MAC OX, pues me he vuelto loco a buscarlo y tengo la sensacion de que mi Eclipse tendra que esperarlo, ya que creo que solo lo hay para Windows... :-(




Título: Re: FORK en java
Publicado por: egyware en 1 Agosto 2012, 03:23 am
Ahhh disculpa, no había entendido tu pregunta.
Entonces yo no puedo responderte a tu pregunta, tendrás que experimentar para ver si es equivalente al Fork.

Ahh una cosa más...
Si no mal recuerdo en esas conversaciones que he tenido con compañeros que ya no es muy recomendable usar Fork si no procesos hijos o Threads ya que estos ultimos comparten la memoria del proceso sin tener que crear otro proceso.

Saludos.


Título: Re: FORK en java
Publicado por: ChavalChavito en 1 Agosto 2012, 06:38 am
Estuve leyendo un poco...
fork() crea un proceso hijo identico al padre.. Los applets Java no pueden lanzar ningún proceso en el cliente, porque eso sería una fuente de inseguridad y no está permitido. Las aplicaciones y los applets deben utilizar hilos de ejecución..
Los hilos se distinguen de los tradicionales procesos en que los procesos son –generalmente– independientes, llevan bastante información de estados, e interactúan sólo a través de mecanismos de comunicación dados por el sistema. Por otra parte, muchos hilos generalmente comparten otros recursos de forma directa. En muchos de los sistemas operativos que dan facilidades a los hilos, es más rápido cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a otro. Este fenómeno se debe a que los hilos comparten datos y espacios de direcciones, mientras que los procesos, al ser independientes, no lo hacen. Al cambiar de un proceso a otro el sistema operativo (mediante el dispatcher) genera lo que se conoce como overhead, que es tiempo desperdiciado por el procesador para realizar un cambio de contexto (context switch), en este caso pasar del estado de ejecución (running) al estado de espera (waiting) y colocar el nuevo proceso en ejecución. En los hilos, como pertenecen a un mismo proceso, al realizar un cambio de hilo el tiempo perdido es casi despreciable.
Sistemas operativos como Windows NT, OS/2 y Linux (2.5 o superiores) dicen tener hilos "baratos", y procesos "costosos" mientras que en otros sistemas no hay una gran diferencia.


Título: Re: FORK en java
Publicado por: reylagarto19 en 1 Agosto 2012, 12:42 pm
Muchas gracias por las respuestas, esta claro que tb os sabeis la teoria, jeje.

Solo una cosa mas, a pesar de la inseguridad que se genera con los fork(), en alguna ocasion especifica, no seria interesante poder usar fork() ??

supongamos que tenemos un App concurrente, no seria interesante el poder hacerlo con procesos para darle independencia a cada proceso que se genere y asi su propio espacio de memoria?? (siempre y cuando no haya necesidad de compartir datos entre procesos, en tal caso seria obvio usar Threads)

no se si me he explicado bien...
pero el caso es, si yo tengo un App en el que cada hilo necesita "bastante memoria" y ademas no hay "datos compartidos entre hilos" seria mas interesante poder hacer fork(), no?? ademas se dotaria de mas potencia a la App, por ofrecerle mas memoria, no??

o estoy yo en un pensamiento erroneo ??

Gracias chicos!


Título: Re: FORK en java
Publicado por: ChavalChavito en 1 Agosto 2012, 16:51 pm
No entiendo q ganarias.. un proceso puede tener un solo hilo (por asi decirlo) de control como maximo x proceso..
En cambio con multitrhead puedes tener mas hilos por proceso, 1 o mas se entiende?
mira..
http://astreo.ii.uam.es/~ortigosa/ssoo/04-Hilos-6pp.pdf (http://astreo.ii.uam.es/~ortigosa/ssoo/04-Hilos-6pp.pdf)


Título: Re: FORK en java
Publicado por: egyware en 1 Agosto 2012, 20:47 pm
Muchas gracias por las respuestas, esta claro que tb os sabeis la teoria, jeje.

Solo una cosa mas, a pesar de la inseguridad que se genera con los fork(), en alguna ocasion especifica, no seria interesante poder usar fork() ??

supongamos que tenemos un App concurrente, no seria interesante el poder hacerlo con procesos para darle independencia a cada proceso que se genere y asi su propio espacio de memoria?? (siempre y cuando no haya necesidad de compartir datos entre procesos, en tal caso seria obvio usar Threads)

no se si me he explicado bien...
pero el caso es, si yo tengo un App en el que cada hilo necesita "bastante memoria" y ademas no hay "datos compartidos entre hilos" seria mas interesante poder hacer fork(), no?? ademas se dotaria de mas potencia a la App, por ofrecerle mas memoria, no??

o estoy yo en un pensamiento erroneo ??

Gracias chicos!



En ese caso llamas otro Proceso (distinto) usando Processs

Bueno ahora con respecto a tu pregunta, no tengo que aportar xDDD