hdolder.com srl

  hdc Home    |    Contenido    |    KO1    |    Director    |    Direcciones    |    email
  M&P TBW - MPRe Test de Reentrancia - Performance

 

 

 

 *** Documento en elaboración ***    v183

Para el Test de Reentrancia tomanos la función BScript recursiva "mpcdown" (countdown):

(de mpcdown (n) (if (< n 1) 0 (mpcdown (- n 1))))

y la partimos en dos partes que colaboran entre si:

(de mpbcdown (n) (if (< n 1) 0 (mpscdown (- n 1))))

(de mpscdown (n) (if (< n 1) 0 (mpbcdown (- n 1))))

bcdown se corre en el Browser y scdown se corre en el Server. La colaboración entre ambas requiere invocaciones remotas reentrantes.

Así, la ejecución del comando en el Browser

(mpbcdown 1000)

produce 500 invocaciones remotas sincrónicas desde el Browser al Server y 500 invocaciones remotas sincrónicas desde el Server al Browser.

Como veremos mas abajo implementamos las funciones BScript en C#

Performance

En la versión actual (11.0215) utilizando un enlace Internet de 1 Mbps y un servidor de 1 GHz el tiempo promedio para el round-trip de cada invocación remota es 20 msec (20 milisegundos).

En una LAN Wi-Fi con un servidor de 2.8 GHz el tiempo promedio para el round-trip de cada invocación remota es 4.5 msec (4.5 milisegundos).

Este valor promedio es el que utilizamos en las decisiones de distribución de funciones en una aplicación.

Esta cifra promedio puede ser reducida en futuras versiones.

Implementación de las funciones BScript en C#

El siguiente codigo muestra lo fácil que resulta implementar funciones BScript en C#.

El codigo C# para la función mpbcdown que se corre en el Browser es:

OB.RegSvc("mpbcdown", cdown);
......
IBChannelB2S IBChannelB2S = ... 
......
private BSX cdown(ENV Env, BSX bsx)
{
    Number n = bsx;

    if (n < 1)
    {
        return 0;
    }

    Number ret = -999;

    BL PROGL = OB.BL("mpscdown", n - 1);
    return Number.Convert(
        IBChannelB2S.EvalBSX2(PROGL).Value); 
}

y el codigo C# para la función mpscdown que se corre en el Server es:

OB.RegSvc( "mpscdown", cdown);
..............
BChannelS2B BChannelS2B = ....
.............
private BSX cdown(ENV Env, BSX bsx)
{
    Number n = bsx;

    if (n < 1)
        return 0;

    Number ret = -999;

    BL PROGL = OB.BL("mpbcdown", n - 1);
    return Number.Convert(BChannelS2B.EvalBSX2(Env, PROGL).Value); 
}

Ver también

 

  TBW The BLOCKS World

©2012 hdolder.com srl  

CMJyHoeiF
2011-12-16