¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Implementação de paralelismo em ABAP utilizando o conceito de Thread Pool Executor.

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 7 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.

Motivação


De tempos em tempos, nos deparamos com a necessidade de realizar algum trabalho em paralelo. Recentemente, trabalhei em um processo que estava demorando muito para ser útil. Estava lidando com grandes quantidades de dados e criando uma quantidade ainda maior de registros seguindo regras complexas, validações e enriquecimento.

Ao revisitar algumas técnicas de paralelismo em ABAP, minhas opções basicamente eram dividir os dados de entrada e então executar FMs em segundo plano, iniciar uma nova tarefa ou escrever um relatório e programar um trabalho com o paralelismo sendo intervalos de um critério de seleção.

Todas são opções válidas, suponho, mas me acostumei a trabalhar puramente em OO e usar FMs aqui e ali para ter meu paralelismo tinha um odor particularmente ruim. Isso me impediria de afirmar qualquer comportamento crítico através de testes unitários, para começar, e também adicionaria essa nova responsabilidade, rodar em paralelo, a lugares estranhos com código que parecia chato e repetitivo (pegar dados de classes, executar fm, retornar dados…).

Então decidi encontrar uma abordagem de OO para o paralelismo em ABAP e me inspirei no Thread de Java. Fiquei particularmente atraído pelo Thread de Java devido à sua simples interface Runnable, que permite aos desenvolvedores envolver rapidamente o que precisa ser feito em paralelo em um único método. Eu poderia usá-lo simplesmente para chamar os métodos existentes que eu já tinha. Abaixo está um exemplo de como ficaria em Java.
  public class MyRunnable implements Runnable {

    public void run(){
       myOtherClassMethodThatDoesStuff( )
    }
  }

Runnable runnable = new MyRunnable(); // ou uma classe anônima, ou lambda...
Thread thread = new Thread(runnable);
thread.start();

zthread


Provavelmente há centenas de implementações semelhantes a esta por aí. Espero que esta possa ser útil para alguns de vocês. Meu conceito é exatamente o mesmo que no Java, tendo a interface Runnable e o Thread como ponto de partida. Como estou acostumado (e gosto) da ideia de callback do JavaScript, a inseri na mistura. Isso tornou parte do código que eu precisava escrever e testar mais fácil. Parece algo assim:

Criado com PlantUML( http://plantuml.com )

Há uma fábrica de threads e algumas implementações padrão também, que eu deixei de fora do diagrama, para ajudar a testar unidades de classes que usam Threads.

Uso


Você pode consultar o git para obter a documentação mais atualizada. Estou colocando alguns exemplos aqui para mostrar como usá-lo de forma geral.

Os exemplos abaixo são baseados em exemplos anteriores. Portanto, zc_my_runnable nem sempre está declarado e sua implementação é a mesma que da última vez definida.


Forma bruta


Simplesmente implemente sua interface runnable, passe-a para um Thread e inicie-o. A desvantagem 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?