| Bellacosa Mainframe e o cobol multithread |
COBOL Multithread no Mainframe: O Lado Quântico da Força no IBM Z
Quando o Padawan Descobre que um Programa COBOL Pode Executar Várias Trilhas de Execução Simultaneamente
Por Bellacosa Mainframe
"Seu pai conhecia uma técnica chamada multithreading. Era um poderoso aliado do lado luminoso da CPU, antes que o excesso de serialização o consumisse."
Mestre Sysprog Bellacosa
A Pergunta que Todo Padawan COBOL Faz
Após aprender:
CALL
Nested Programs
Recursividade
LE
RENT
THREADSAFE
surge uma dúvida inevitável.
Mestre...
Um programa COBOL pode criar Threads?
A resposta curta é:
Sim.
Mas...
Não da forma que Java, C++ ou Python fazem.
E aqui começa uma das partes mais interessantes da arquitetura IBM Z.
O mito do COBOL Monothread
Durante décadas, COBOL foi praticamente sinônimo de:
Uma tarefa
↓
Um programa
↓
Um fluxo
↓
Fim
Exemplo:
OPEN
PERFORM
READ
UPDATE
WRITE
CLOSE
STOP RUN
Linear.
Sequencial.
Determinístico.
Era suficiente.
Bancos.
Seguros.
Governo.
Folha pagamento.
Mas IBM Z mudou
Hoje temos:
LPARs
SMT
zIIP
SRB
TCB
OpenMP
POSIX
USS
Java
C++
Metal C
E COBOL começou a participar desse universo.
A resposta correta
Pergunta:
COBOL possui
CREATE THREAD
Não.
Não possui.
Pergunta:
COBOL pode executar multithread?
Sim.
Através do ambiente.
Onde isso é possível?
Basicamente.
USS
Unix System Services
LE
Language Environment
POSIX
pthread
CICS THREADSAFE
Java Integration
JNI
Metal C
Quando surgiu?
LE apareceu.
Década 90.
Posix Threads.
zOS UNIX.
Enterprise COBOL V3.
V4.
V5.
V6.
COBOL 6.5
convive perfeitamente.
O conceito
COBOL não cria.
COBOL participa.
Exemplo.
C cria.
COBOL executa.
Arquitetura
Programa Mestre
↓
pthread_create()
↓
Thread A
↓
COBOL
THREAD-CPF
Thread B
↓
COBOL
THREAD-END
Thread C
↓
COBOL
THREAD-PIX
Como funciona na memória
Cada thread possui:
PCB
TCB
Stack
Registers
PSW
LE Context
Exemplo
Thread 1
Stack
64 KB
Thread 2
64 KB
Thread 3
64 KB
Visualmente
MEMÓRIA
THREAD 1
STACK
THREAD 2
STACK
THREAD 3
STACK
HEAP
SHARED
O ponteiro de execução
Aqui está a magia.
Cada thread possui.
Instruction Pointer
PSW
Program Counter
Exemplo
Thread 1
EXECUTANDO
Linha 500
Thread 2
Linha 200
Thread 3
Linha 950
Todos simultaneamente.
CPU troca.
Dispatch.
Redispatch.
O Scheduler
zOS decide.
Não COBOL.
WLM.
Gerencia.
Prioridade.
Classe.
Importância.
Exemplo real
Sistema anti-fraude.
Thread 1
CPF
Thread 2
PIX
Thread 3
Cartão
Thread 4
IA
Programa pai espera.
Como esperar
Join.
Exemplo conceitual
THREAD CREATE
THREAD CREATE
THREAD CREATE
WAIT
COBOL recebe resultado.
Exemplo com C
Programa C
pthread_create();
Chama COBOL
THREADCPF
COBOL
PROGRAM-ID. THREADCPF.
Executa.
Retorna.
Pode fazer COBOL puro?
Praticamente não.
Enterprise COBOL
não possui.
START THREAD
Não existe.
Alternativa elegante
Múltiplas subtarefas
Batch.
Exemplo.
JOB
STEP1
STEP2
STEP3
Executando em paralelo.
JES2.
Muito usado.
Outra alternativa
CICS
THREADSAFE
Exemplo
Programa
THREADSAFE
Múltiplas tasks.
CICS gerencia.
THREADSAFE
Extremamente importante.
Programa comum
QR TCB
THREADSAFE
L8
T8
Múltiplas CPUs.
Maior throughput.
Cuidados
Working Storage
Perigoso.
Thread 1
WS=100
Thread 2
WS=500
Corrupção.
Melhor
LOCAL STORAGE
Exemplo
LOCAL-STORAGE SECTION.
Cada thread
sua cópia.
Reentrância
Obrigatório.
Programa
RENT
ou
REENTRANT
Sem isso.
Desastre.
Locks
Às vezes necessários.
Variável compartilhada.
Thread 1
incrementa
Thread 2
incrementa
Resultado errado.
Exemplo
100
esperado
Recebe
98
Race condition.
Segurança
Ataques possíveis.
Deadlock.
Starvation.
Race.
Stack exhaustion.
DoS.
Exemplo
Thread A
espera B
B espera C
C espera A
Fim.
Parado.
Performance
Depende.
CPU bound
Excelente.
I/O bound
Média.
DB2
Depende.
VSAM
Depende.
Locking.
zIIP
Grande vantagem.
LE
Java
XML
podem usar.
Economia MIPS.
Curiosidade
Maioria dos programas COBOL bancários.
Ainda.
Monothread.
Porque.
São rápidos.
Determinísticos.
Confiáveis.
Exemplo Arquitetura Moderna
MASTER
│
├── Thread CPF
├── Thread PIX
├── Thread AML
├── Thread IA
└── Thread LOG
Master acompanha.
Tabela.
THREAD-ID
STATUS
RC
Exemplo
001
RUNNING
002
ENDED
003
WAIT
Master coleta.
Merge.
Retorna.
Pode valer a pena?
Sim.
Análise fraude.
OCR.
JSON.
IA.
APIs.
Criptografia.
Scoring.
Não.
Leitura sequencial.
Sort.
Folha pagamento.
Batch tradicional.
O conselho do Mestre Bellacosa
Multithreading em COBOL no IBM Z é quase como pilotar um caça estelar experimental escondido em um hangar do datacenter. O motor existe, a tecnologia é impressionante, mas ela não foi colocada diretamente no painel de instrumentos do programador COBOL.
O COBOL clássico continua sendo uma linguagem essencialmente sequencial. Entretanto, quando combinado com Language Environment, POSIX Threads, USS, CICS THREADSAFE, Java ou Metal C, ele passa a habitar um universo onde dezenas de trilhas de execução podem coexistir dentro do mesmo endereço de memória, cada uma com seu próprio stack, contexto LE, PSW e ponteiro de instrução.
O verdadeiro Padawan precisa entender uma lição importante:
O programa COBOL não é o Mestre dos Threads.
Ele é um guerreiro altamente especializado convocado para executar missões dentro de um ecossistema que o IBM Z já domina há décadas.
E talvez essa seja a maior beleza do mainframe moderno: ele consegue executar milhões de transações por segundo, milhares de tarefas concorrentes e dezenas de linguagens diferentes, enquanto um antigo programa COBOL escrito há trinta anos continua processando registros tranquilamente, como um velho Mestre Jedi que já viu muitas gerações de processadores nascerem e desaparecerem na galáxia IBM Z.
Sem comentários:
Enviar um comentário