O documento discute conceitos de concorrência em sistemas de software, incluindo threads, transações, isolamento, controle de concorrência e níveis de isolamento. Problemas como leituras inconsistentes e deadlocks são abordados, assim como estratégias como bloqueios otimistas e pessimistas para lidar com a concorrência.
6. 1. China abre o ticket #1456 no Pronto e começa a
atualizar a descrição do ticket.
2. Segundos depois Rodrigo entra no
ticket, e altera.
3.China salva
4. Rodrigo salva
7. Moral da Estória?
As alterações de
China foram perdidas
para todo o sempre...
11. Request
Corresponde a uma única chamada do
mundo externo para onde opcionalmente
uma resposta é enviada.
O servidor processa a resposta e o cliente aguarda.
Alguns protocolos permitem interromper a request.
Clients podem gerar outras request interfiram em anteriores.
12. Request
Corresponde a uma única chamada do
mundo externo para onde opcionalmente
uma resposta é enviada.
O servidor processa a resposta e o cliente aguarda.
Alguns protocolos permitem interromper a request.
Clients podem gerar outras request interfiram em anteriores.
13. Session
É um interação de longa duração entre o
cliente e o servidor, uma série de requests.
Normalmente associada a login e loguout
Comum na Web, em Bancos de Dados, etc...
14. Session
É um interação de longa duração entre o
cliente e o servidor, uma série de requests.
Normalmente associada a login e loguout
Comum na Web, em Bancos de Dados, etc...
15. Processo
Geralmente um contexto de
execução mais pesado que oferece
isolamento para os dados que
estão sendo trabalhados.
Oferece isolamento de memória e dados, por isso, há pouca
preocupação com concorrência nesse nível.
16. Processo
Geralmente um contexto de
execução mais pesado que oferece
isolamento para os dados que
estão sendo trabalhados.
Oferece isolamento de memória e dados, por isso, há pouca
preocupação com concorrência nesse nível.
17. Thread
Um agente leve, pode haver
múltiplas threads por processo.
Com threads é possível suportar n requests em por processo.
Melhor utilização de recursos, são mais “baratas” que processos.
Geralmente compartilham memória e dados.
Alguns ambientes oferecem threads com isolamento.
18. Thread
Um agente leve, pode haver
múltiplas threads por processo.
Com threads é possível suportar n requests em por processo.
Melhor utilização de recursos, são mais “baratas” que processos.
Geralmente compartilham memória e dados.
Alguns ambientes oferecem threads com isolamento.
21. Isolamento
Dividir os dados para que cada parte,
seja usada apenas por um agente ativo.
22. Exemplo de Isolamento
O sistema operacional
reservando uma área de
memória exclusiva para cada
processo
23. Isolamento
A abordagem é também
usada para arquivos. Se
Douglas abre o arquivo X
ele fica bloqueado e
ninguém mais pode editá-
lo (talvez nem abrí-lo).
24. Imutabilidade
Só há problemas de
concorrência quando os
dados podem ser
alterados.
Por isso é importante que
tudo que possa ser
imutável, seja imutável.
50. Late Transactions
Começa o mais tarde possível
Aumenta o risco de
leituras incosistentes
51. Lock Escalation
Você pode acabar gerando mais locks do
pode gerênciar...
Quando o banco de dados tem muitos
locks em linhas, acaba precisando
bloquear a tabela toda
Cuidado com
Layer Supertype
54. Mike está Bob está
contando incluindo 5
arquivos arquivos
55. Garante um resultado sempre correto,
embora possa ser anterior ou posterior a
alteração
56. Não garante que toda vez que você
executar o mesmo cenário terá o mesmo
resultado
57. Repeatable Read
permite fantasmas
Você executa duas vezes a mesma
consulta e recebe um número
diferente de registros em cada
uma delas.
não gerencia
range-locks
58.
59. Read Committed
permite leituras não repetíveis
A transação lê duas vezes o
mesmo dado, e em cada um
das vezes recebe um resultado
diferente.
não gerencia range-locks
60.
61. Read Uncommited
permite leitura suja
Você consegue
ler dados de
transações que
ainda não
foram
comitadas