• Publicidad

Cómo funcionan los threads en Perl

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Cómo funcionan los threads en Perl

Notapor danimera » 2013-10-18 09:33 @440

Realmente, aunque he usado esto, no entiendo bien cómo funciona.

Ahora tengo un SQL asincrónico, que cada vez que hay un nuevo registro debe disparar un proceso para ese registro, pero no puedo esperar a que termine un proceso para iniciar el otro.

Me explico:

Tengo un identificador de un pago, y cada vez que me llega ese identificador, debo consumir un webservice durante 20 minutos para hacer el seguimiento a ese pago...

Mi problema es que, no serán más de 500 pagos al instante, pero no puedo enfrentarme a los jefes explicando esto por que no lo entiendo, los procesos quedan en cola, quedan en memoria, se ejecuta un nuevo proceso, es un demonio...

Si yo tengo esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Thread qw(:DEFAULT async yield);
  2.  
  3. my $t = Thread->new(\&start_sub, @start_args);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

se ejecuta el método stat_sub() pero sin esperar que el método retorne algo para que así el programa siga su ejecución...

O esto será poco eficiente para lo que quiero, y es mejor hacer un método... Lo que me ASUSTA ES QUE ME ENCUENTRE CON 500 pagos a la vez y que eso se demore más de tres minutos en responder. :S
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Cómo funcionan los threads en Perl

Notapor explorer » 2013-10-18 13:03 @585

A ver si lo he entendido... te llega una petición que debes atender... y esa petición debe resolverse accediendo a un servicio web... que puede tardar 20 minutos en resolverse... ¿es así?

Bueno, como tienes que esperar, entonces todo depende de los recursos que tenga el servidor. Si tienes suficiente memoria RAM, no hay problema. Seguro que los programas que procesan las peticiones son ligeros... así que no importa que haya 500 hilos ejecutándose...

Yo tengo un servidor que, en estos momentos, tiene 770 procesos, de los cuales más de 600 corresponden a hilos de ejecución generados por solo dos ejecutables.

Sobre el tema de los 500 pagos simultáneos... es fácil echar la cuenta...

Tiempo total de resolución = (número de pagos / número de CPU) * tiempo de resolución de un pago

Entonces, si llegan quinientas peticiones de forma simultánea, y tienes un servidor con cuatro núcleos (pero uno de ellos lo usa el sistema operativo), y el tiempo medio de respuesta es de dos segundos, nos sale:

(500 pet / 3) * 2 s/pet ≃ 5 m

Naturalmente, ese tiempo es teórico: los cambios de contexto entre hilos ocupa tiempo, el sistema operativo ocupará una de las CPU en exclusiva para él (para hacer el resto de tareas), las transferencias a disco ocupan tiempo, etc.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo funcionan los threads en Perl

Notapor danimera » 2013-10-18 14:24 @642

explorer escribiste:A ver si lo he entendido... te llega una petición que debes atender... y esa petición debe resolverse accediendo a un servicio web... que puede tardar 20 minutos en resolverse... ¿es así?
Sí, exacto.

Bueno, como tienes que esperar, entonces todo depende de los recursos que tenga el servidor. Si tienes suficiente memoria RAM, no hay problema. Seguro que los programas que procesan las peticiones son ligeros... así que no importa que haya 500 hilos ejecutándose...
Sí, los programas son ligeros, es un demonio que está recibiendo datos del sql asincrónico y debería disparar los hilos ("aún no sé muy bien qué es un hilo, técnicamente").

Yo tengo un servidor que, en estos momentos, tiene 770 procesos, de los cuales más de 600 corresponden a hilos de ejecución generados por solo dos ejecutables.
Genial.

Sobre el tema de los 500 pagos simultáneos... es fácil echar la cuenta...

Tiempo total de resolución = (número de pagos / número de CPU) * tiempo de resolución de un pago

Entonces, si llegan quinientas peticiones de forma simultánea, y tienes un servidor con cuatro núcleos (pero uno de ellos lo usa el sistema operativo), y el tiempo medio de respuesta es de dos segundos, nos sale:

(500 pet / 3) * 2 s/pet ≃ 5 m
¿5 m son 5 minutos?

Naturalmente, ese tiempo es teórico: los cambios de contexto entre hilos ocupa tiempo, el sistema operativo ocupará una de las CPU en exclusiva para él (para hacer el resto de tareas), las transferencias a disco ocupan tiempo, etc.
Básicamente se puede dar el caso, de que en la fecha del pago, entren 300 personas o 500 personas a pagar, y cada proceso de un pago puede tomar 20 minutos, y yo debo estar consumiendo el webservice durante todo ese tiempo para cada pago...

Como siempre me ha ayudado tu respuesta, ahora la cuestión final, es yo no entiendo mucho sobre hilos en Perl, pero digamos que con esto me basto...
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Cómo funcionan los threads en Perl

Notapor explorer » 2013-10-18 15:51 @702

Para saber qué es un hilo de ejecución, pues una introducción está, obviamente, en la Wikipedia. Digamos que es una "copia" del programa que se está ejecutando, pero no se crea una copia en otra parte de la memoria, sino que se comparte la misma. Y lo que sí se separa es la parte de variables. Entonces, en teoría, si sacas 500 copias de un ejecutable, no estás ocupando 500 veces el espacio del ejecutable.

No entiendo lo que quieres decir con "consumir el webservice durante todo ese tiempo". Las peticiones SOAP son como las HTTP: puntuales.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo funcionan los threads en Perl

Notapor danimera » 2013-10-18 17:01 @750

Gracias, explorer... como siempre, gracias.
No entiendo lo que quieres decir con "consumir el servicio web durante todo ese tiempo". Las peticiones SOAP son como las HTTP: puntuales.

Eso quiere decir que tengo hasta 20 minutos para consultar el id del pago, es el tiempo que tiene el cliente en iniciar el proceso de pago y terminar el pago en su banco, yo tengo que ir consultando el estado del pago cada 3 minutos hasta un máximo 21 minutos, es todo.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados