C/Visual C - ejecuacion simultanea de mismo programa?

 
Vista:

ejecuacion simultanea de mismo programa?

Publicado por laura (6 intervenciones) el 26/12/2006 07:47:13
hola.

tengo unos programas escritos en c, para edicion de registros de un archivo.
estan funcionando pero en modo mono-usuario en una pc.

mi jefe me ha pedido que ahora los adapte para funcionar en una maquina con linux, como servidor, para que mas de una persona pueda utilizar esos programas.

para ilustrar el problema solo voy a poner el caso de *adicion de registros*, que levanta las llaves
a memoria, en un arreglo, para hacer el filtro.

1) si mas de una persona decide adicionar registros, habrian tantos arreglos de llaves en memoria, al mismo tiempo, como clientes?

como debo tratar ese problema? o como se trata ese problema?
es la primera vez que voy a programar para un entorno multiusuarios.

necesito orientacion, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ejecuacion simultanea de mismo programa?

Publicado por Tom (619 intervenciones) el 26/12/2006 12:00:18
¿ Un programa servidor para todos los clientes ?
¿ O un programa por cada cliente ?

En el primer caso, modificarás tu programa actual para que admita peticiones por algún canal (memoria compartida, sockets, señales, etc ...) y tendrás que desarrollar la parte cliente.

En el segundo caso, dividirás tus programas actuales, separando la parte cliente de la parte servidor y adaptando lo necesario, como en el primer caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por laura (6 intervenciones) el 27/12/2006 05:10:14
hola.

lo que no tengo bien claro es como voy a tratar el array de llaves si hubiera mas de un cliente que quiere accesar.

cuando me dices: "memoria compartida", debo entender uno y solo un array de llaves que levante el servidor para todos los clientes?

disculpa el desconocimiento, es que esto es nuevo para mi

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por Tom (619 intervenciones) el 27/12/2006 10:32:47
Sí, puedes mantener tu array en una zona de memoria compartida, accesible para todos los programas que lo usen.
Pero eso no es necesario si haces un sólo programa servidor que maneje todas las peticiones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por laura (6 intervenciones) el 27/12/2006 12:25:53
hola tom.

gracias pero no entendi muy bien.

voy poner un ejemplo para explicarme.

digamos que 'adiciona.cpp' es el programa que levanta el array a memoria.

si hubieran, por decir, tres clientes que ejecutan 'adiciona.cpp', entonces habrian tres procesos 'adiciona.cpp', cada uno con su propio array? uno para cada cliente?

gracias por la paciencia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por Tom (619 intervenciones) el 27/12/2006 16:05:27
Si adiciona.cpp es un cliente (lo es tal y como tú lo describes) está claro que no puede tener su propio array; debes usar un array en memoria compartida, para que cada ejecución o instancia de adiciona lo tenga disponible pero, al mismo tiempo, todas las instancias vean los mismos datos.

Lo que te quería decir es que si conviertes adiciona.cpp en un programa servidor, sólo habrá una instancia en ejecución, con lo que sí podría tener su propio array en memoria de proceso; en este caso deberías desarrollar un programa cliente que se comunicara con adiciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por laura (6 intervenciones) el 28/12/2006 03:06:31
hola.

gracias por adelantado.

hasta aqui tengo claro sobre el array en memoria.

lo que no esta claro es lo sgte:
(para generalizar) el programa que maneja el array, en este caso si convirtiera 'adiciona.cpp' en un servidor, y que solo habria una instancia de el en ejecucion. La pregunta es: quien (o que proceso) y en que momento crearia esa unica instancia de 'adiciona.cpp'? por lo que sospecho, 'adiciona.cpp' se volveria un daemon?

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por Tom (619 intervenciones) el 28/12/2006 09:07:35
Bueno, eso a tu criterio. No es necesario que sea un daemon, aunque se suele hacer así. Este programa podría lanzarse como un servicio durante el arranque de la máquina, o de forma manual.

Yo, en principio, lo haría como un programa normal, más que nada para que sea más fácil depurar los posibles errores. Cuando funcione puedes "limpiarlo", eliminando las salidas de texto por stdout y dejándolas en un fichero de log, por ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por laura (6 intervenciones) el 28/12/2006 15:06:15
hola.

bueno, ahora mi inquietud es: como hacer cuando no haya demanda de adicionar registros? el programa va a seguir ejecutando? y con su array en memoria. O sea, "quien" y como inicia y finaliza "adiciona.cpp" ?

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por Tom (619 intervenciones) el 28/12/2006 17:37:21
Pues también depende. ¿Qué quieres hacer con tus registros en memoria? Si no los guardas en un fichero los perderás cada vez que finalice tu programa servidor.
Por otra parte, si los guardas en un fichero y éste se hace muy grande, tu programa servidor tardará en subirlo a memoria cada vez que lo arranques.

Lo mejor es que lo lances en el arranque de la máquina y lo pares al apagar, configurando los scripts correspondientes en /etc/init.d (y demás).

Tambien, si tu servidor escucha en un puerto IP determinado, puedes configurar el daemon inetd (o xinietd) para que lance tu programa al recibir peticiones por ese puerto.

Y, por último, puedes lanzarlo y pararlo tú, a mano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por laura (6 intervenciones) el 29/12/2006 12:49:59
hola

gracias por la aclaracion.

debo suponer que el fichero cada vez va a crecer. Por tanto, no me conviene arrancar mi programa servidor por cada operacion de adicion. Hasta aqui, entendi bien.

solo que ahora tengo la sgte inquietud:
si el programa servidor lo arranco con un script en '/etc/init.d', entonces el va a estar escuchando por algun puerto(que le asigne) no es asi?
Y es por ese puerto que recibiria las peticiones y los datos para adicion.
Pero ello significa que ese programa servidor siempre va a tener las llaves (,los datos vivos) en memoria todo el tiempo? (logicamente sincronizado con el fichero cada vez que haya una adicion)

creo que esa es la idea que capte

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecuacion simultanea de mismo programa?

Publicado por Tom (619 intervenciones) el 29/12/2006 13:46:29
Vamos a ver, no hay, afortunadamente, una sola manera de hacer las cosas.
Si el programa tiene o no el array constantemente en memoria todo el tiempo depende de tí, hazlo como te parezca ...
Un programa que da algun servicio, tiene que proporcionar el método para que se lo pidan. Si piensas hacer las peticiones por TCP/IP, pues sí, tu programa, lo arranques como lo arranques tendrá que ponerse a "escuchar" en algún puerto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: gracias tom

Publicado por laura (1 intervención) el 29/12/2006 14:47:59
muy gentil de tu parte...

ya tengo alguna idea. voy a comenzar a codificar y a ver que sale.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar