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 (trabajadores o workers) 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: