MainframeSupports
tip uge 38/2007:

Egentlig har jeg i mange år syntes, at der ikke var meget tip i at skrive om dynamisk kald af programmer fra COBOL, men så blev jeg inddraget i en diskussion om, hvor meget dyrere det egentlig er at kalde dynamisk i stedet for statisk. For de uindviede: hvis programmerne A og B indgår i samme LOAD-modul og program A kalder program B eller omvendt, så er det et statisk kald. Hvis program A og program B indgår i hver sit LOAD-modul og de kalder hinanden, så er det et dynamisk kald.

I COBOL har man, så længe jeg har arbejdet med COBOL, kunnet vælge mellem dynamiske og statiske kald nærmest efter forgodtbefindende. Jeg tror faktisk, at det er en af hovedårsagerne til, at COBOL er blevet foretrukket frem for PL/I, som først for nylig er blevet udstyret med samme fleksibilitet. I COBOL kalder man andre programmer vha. CALL, som findes i to udgaver:

01 PROGRAMA PIC X(8) VALUE 'PROGRAMA'.
...
CALL 'PROGRAMA' USING ...
...eller
CALL PROGRAMA USING ...

Hvis compiler option DYNAM anvendes, vil begge CALL statements blive til dynamiske kald. Hvis compiler option NODYNAM anvendes, vil det første CALL (hvor programnavnet er angivet som en konstant) blive til et statisk kald, mens det andet kald (hvor programnavnet er angivet som en variabel) fortsat vil være et dynamisk kald. Med NODYNAM får man altså mulighed for at vælge mellem dynamiske og statiske kald, hvad der godt kan føre til en del forvirring og problemer, som jeg dog ikke vil komme nærmere ind på her.

Faktisk er min hovedpointe med dette tip at fremlægge mine observationer omkring prisen for at kalde dynamisk. Grundlæggende bør prisen for dynamiske kald i forhold til statiske kald kun være den ekstra tid, der skal bruges på at loade det kaldte program ind i storage føste gang programmet kaldes. Derefter bør prisen være den samme. Hvis du kalder et meget simpelt program, som ikke laver andet end at returnere til kalderen med det samme, så er du i stand til at måle den reelle omkostning. Til min store overraskelse viste det sig, at det er næsten dobbelt så dyrt at kalde dynamisk som statisk ikke bare ved det første kald, men også på de efterfølgende kald.

Nu er der ikke tale om noget voldsomt ressourceforbrug, men hvis du skal kalde det samme program rigtig mange gange, og det i øvrigt ikke laver ret meget (eksempelvis datovalidering), så er det værd at overveje, at kalde et sådant program statisk. Mine målinger er i øvrigt foretaget under TSO, så det kan godt være, at det er anderledes under CICS. Det kan også skyldes variationer i COBOL runtime modulerne fra release til release.

Forrige danske tip        Last tip in english        Tip oversigten