
Ved Renden 31 2870 Dyssegaard Tel. +45 23 34 54 43
| 
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
|