[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2008
    Beiträge
    109

    Parallele Verarbeitung

    Guten Morgen

    Ich habe folgendes Problem:
    Ein PGM A erhält Daten aus einem File und wertet diese aus.
    Je nach Art der Daten soll jeweils ein weiteres PGM B gestartet werten, dass eine Folgeverarbeitung des jeweils gelesenen Datensatzes übernimmt.

    Soweit so gut - ABER

    Ich möchte dass:
    - PGM A nicht auf die Beendigung von B wartet, sondern parallel dazu weiter arbeitet
    - PGM B mehrfach aufgerufen wird - je nach Art der Daten -> PGM B1, B2, B3 usw.
    - Der Aufruf von PGM B in einer internen Tabelle in PGM A gespeichert wird, so dass bei gleicher Art der Daten das dazu passende laufende PGM Bn nur noch die Daten bekommt

    Geht sowas ? Und wenn ja wie?

    Vielen Dank vorab

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Eine parallele Verarbeitung ist tatsächlich nur mit C++ und Multithreading bzw. Java möglich.

    Du musst einfach die benötigten Programme für die parallele Verarbeitung in ein Subsystem submitten. Alternativ geht's auch über Prestart-Job's.
    Diese Programme warten auf Aktionen über eine DTAQ (QRCVDTAQ).
    Das Hauptprogramm sendet dann an diese DTAQ's (QSNDDTAQ) entsprechende Aufträge.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Feb 2008
    Beiträge
    109
    Danke für die Antwort... das habe ich schon befürchtet

    Und als Kommunikation zw. Hauptprogramm und Childs auch eine DTAQ?

  4. #4
    Registriert seit
    Feb 2008
    Beiträge
    109
    Bringt mir der Aufruf mit ACTGRP(*NEW) etwas?

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nein, da ja das Programm per CALL aufgerufen und mit Return verlassen wird kann es nicht parallel laufen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    104
    Es wäre für uns ganz interessant zu hören, unter welchen Umständen die Programme A und B1, ..., Bn laufen sollen. Z.B.


    • Wie viele Sätze erscheinen in welcher Zeit in A ?
    • Wie lange dauert die Verarbeitung von A ohne B ?
    • Wieviele Programme B1, ..., Bn gibt es ?
    • Wie lange dauert die Verarbreitung der B ?
    • Welche Auslastung wird bei Batch- Verarbeitung (rein sequentiell) erreicht ?
    • Wieviele Prozessoren stehen für Parallelverarbeitung zur Verfügung ?
    • Gibt es andere Gründe, die B's in separaten Streams arbeiten zu lassen ?


    Ich habe so ein Programmpaket mal alleine mit CLP's geschrieben, also A startet das Lesen mit einer Datei, ruft evtl. A2 per call, und erweckt dann je nach Bedarf Tasks B1, B2, ... Bn, denen es über n Messagequeues oder DataQueues Datenpakete zusendet. Die B's empfangen asynchron die Datenpakete, und verarbeiten sie parallel zu A.

    Bei mir hatte ich noch C1,...Cn und D1,...Dn dahinter, also eine ganze Kaskade von Instanzen und Tasks, die obendrein auf 2 bis 3 Mehrprozessor-Rechnern verteilt wurden.

    Später habe ich alles von CL in REXX umgeschrieben, eine Sprache, mit der man ganz gut Zeichenketten und Tabellen (SQL-Resultsets) verarbeiten kann. Sie kann wunderbar CL-Befehle und SQL-Befehle absetzen, Messages parsen, die Daten entnehmen, Fälle unterscheiden, Daten weitersenden oder mit SQL speichern usw. Meine Jobs, die normalerweise sehr zäh liefen, und ohne Multitasking den ganzen Tag in Anspruch nahmen (auch mehrere Tage), liefen durch dieses von mir erarbeitere Multitasking in 15-45 Min durch, weil jede Task nur eine spezielle Aufgabe ausführte, wobei sie eine sehr hohe Effektivität erreichte (Programme nur einmal laden und bereit halten). Der Zeitbedarf ging also zurück, und die Tasks störten kaum noch, bis auf die Tastache, daß die CPU's öfters 100% anzeigten.

    Mit Java oder C++ kann man das auch, und sogar echtes Multithreading betreiben. RPG- oder COBOL-Programmierer lernen so was aber eher selten, und man müßte sich intensiv mit ILE-Programmierung beschäftigen, um das vernünftig zu gestalten. Dann kann man aber sowohl C++ als auch ILE-RPG der ILE-COBOL dafür verwenden.

    Im Prinzip kommt es vor allem darauf an, ob es wichtig genug ist, solchen Aufwand zu rechtfertigen. Bei mir ging es z.B. um Testtools, die ich nach Maß innerhalb von ca. 14 Tagen geschneidert habe, und die bestimmt 10 Jahre lang benutzt wurden - wahrscheinlich sogar heute noch.

    Ähnliches habe ich auch schon mit MQ-Series realisiert. Dabei ging es um regelrechte Webservices, die von Webusern in Anspruch genommen werden konnten. Man kann das dann zum Anlaß nehmen, eine ganze Palette von speziellen Tasks passend zu orchestrieren (6 Geigen, 2 Trompeten, 1 Klavier, 10 Sänger, ...), so daß alle wirklich gut zusammen spielen.

    Bei weiterem Interesse mir bitte eine PN senden.

  7. #7
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Vielleicht geht auch ein SBMJOB in Verbindung mit RCVMSG CPC1221.

Similar Threads

  1. parallele FTP-Übertragungen
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 25-06-08, 13:33
  2. Verarbeitung mit variabler Satzstruktur
    By RaMai in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 02-11-07, 18:21
  3. MQ-Series: Automatische Verarbeitung
    By RLurati in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 20-10-06, 10:09
  4. MQ-Series: Automatische Verarbeitung
    By RLurati in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 20-10-06, 09:31
  5. Fehler bei Verarbeitung von QSZPAVL
    By Brownie in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 28-07-04, 11:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •