Translate

Mostrar mensagens com a etiqueta Multithreading. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Multithreading. Mostrar todas as mensagens

terça-feira, 26 de março de 2024

COBOL Multithread no Mainframe: O Lado Quântico da Força no IBM Z

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.