¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Implementación de paralelismo en ABAP utilizando el concepto de Thread Pool Executor

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 63 Vistas
0
Cargando...

Edit:


After some feedback and some time to work on this I've improved the examples and introduced the Thread Pool Executor concept.

Motivación


Cada cierto tiempo nos encontramos con la necesidad de realizar algún trabajo en paralelo. Recientemente trabajé en un proceso que estaba tardando demasiado en ser útil. Estaba tomando grandes cantidades de datos y creando una cantidad aún mayor de registros siguiendo reglas complejas, validaciones y enriquecimiento.

Al refrescar algunas técnicas de paralelismo en ABAP, mis opciones básicamente eran dividir los datos de entrada y luego ejecutar FMs en segundo plano, iniciar una nueva tarea o escribir un informe y programar un trabajo con el paralelismo siendo rangos de un criterio de selección.

Todas son opciones válidas, supongo, pero me acostumbré a trabajar puramente en OO y usar FMs aquí y allá para tener mi paralelismo tenía un olor particularmente malo. Esto me impediría afirmar algún comportamiento crítico a través de pruebas unitarias, para empezar, y también agregaría esta nueva responsabilidad, correr en paralelo, a lugares extraños con código que se veía aburrido y repetitivo (tomar datos de clases, ejecutar fm, devolver datos…).

Así que decidí encontrar un enfoque de OO para el paralelismo en ABAP, y tomé como inspiración el Thread de Java. Me sentí particularmente atraído por el Thread de Java dado su simple interfaz Runnable, que permite a los desarrolladores envolver rápidamente lo que debe hacerse en paralelo en un solo método. Podría usarlo simplemente para llamar a los métodos existentes que ya tenía. A continuación se muestra un ejemplo de cómo se vería en Java.
  public class MyRunnable implements Runnable {

    public void run(){
       myOtherClassMethodThatDoesStuff( )
    }
  }

Runnable runnable = new MyRunnable(); // o una clase anónima, o lambda...
Thread thread = new Thread(runnable);
thread.start();

zthread


Probablemente hay cientos de implementaciones similares a esta por ahí. Espero que esta pueda ser útil para algunos de ustedes. Mi concepto es exactamente el mismo que en Java, teniendo la interfaz Runnable y el Thread como punto de partida. Como estoy acostumbrado (y me gusta) la idea de devolución de llamada detrás de Javascript, la he lanzado al mix. Hizo que parte del código que necesitaba escribir y probar fuera más fácil. Se ve algo así:

Creado con PlantUML( http://plantuml.com )

Hay una interfaz de fábrica de threads y algunas implementaciones predeterminadas también, que he descartado del diagrama, para ayudar a probar unidades de clases que usan Threads.

Uso


Puedes consultar git para obtener la documentación más actualizada. Estoy poniendo algunos ejemplos aquí para mostrar cómo usarlo en general.

Los ejemplos a continuación se basan en ejemplos anteriores. Por lo tanto, zc_my_runnable no siempre está declarado y su implementación es la misma que la última vez definida.


Forma cruda


Simplemente implementa tu interfaz runnable, dásela a un Thread y arráncalo. La desventaja de
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?