Ejemplo sencillo de paralelización con WorkMgr

El archivo workmgr_simple.prj_.zip contiene un ejemplo simple de paralelización con $system.WorkMgr 

El ejemplo utiliza diferentes procesos (trabajadoresworkers) para actualizar pedazos de una misma tabla .

¿En qué consiste el ejemplo?

  • Crea una tabla con 100 filas.
  • Divide la tabla en distintos pedazos (cada pedazo es un grupo de filas) sobre las que actuarán los trabajadores.
  • Inicializa $system.WorkMgr y asigna los pedazos en que se ha dividido la tabla a los procesos trabajadores:
    • Cada proceso trabajador actualiza las filas del pedazo de la tabla que le haya tocado.
    • En este caso, la actualización que realiza cada proceso trabajador, consistirá simplemente en modificar la columna Job de la fila almacenando el identificador del proceso.

Ejecución del ejemplo

Prueba realizada en un equipo con 8-cores:

USER>do ##class(IAT.S04.WorkMgr.Simple).%DeleteExtent()
USER>do ##class(IAT.S04.WorkMgr.Simple).Populate(100)
USER>do ##class(IAT.S04.WorkMgr.Simple).UpdateWorkMgr()
**Split
pChunks=8
returnCode=1
chunks=$lb("12","24","36","49","62","75","88")
^Samples.Log=8
^Samples.Log(1)="UpdateOneChunk [11224] (12,24)"
^Samples.Log(2)="UpdateOneChunk [13404] (,12)"
^Samples.Log(3)="UpdateOneChunk [15752] (24,36)"
^Samples.Log(4)="UpdateOneChunk [3352] (36,49)"
^Samples.Log(5)="UpdateOneChunk [6664] (49,62)"
^Samples.Log(6)="UpdateOneChunk [15892] (62,75)"
^Samples.Log(7)="UpdateOneChunk [19872] (75,88)"
^Samples.Log(8)="UpdateOneChunk [13896] (88,)"

Después de ejecutarlo, podemos consultar el campo Job de la tabla: