SlideShare uma empresa Scribd logo
1 de 18
Globalcode – Open4education
Paralelismo na prática:
Threads de uma vez por todas e sem medo!
Carlos Agnes & Mario Guedes
Globalcode – Open4education
Agenda
Mario Guedes – mario@arrayof.io
https://arrayof.io
Motivações para dominar paralelismo
Carlos Agnes - tatu@taturs.com
http://taturs.com
Exemplos práticos para o dia à dia
Globalcode – Open4education
O que é paralelismo?
Capacidade de executar mais de uma tarefa ao
mesmo tempo, ou seja, lado a lado, ou seja, de
forma paralela.
Ao mesmo tempo numas: Depende da quantidade
de CPU presente no dispositivo e da concorrência
com os outros processo e threads.
Globalcode – Open4education
Mas o que é thread?
Thread, ou segmento, é a unidade básica de execução em
um sistema operacional.
Um software tem, no mínimo, uma thread: A thread
principal.
Para executarmos mais de uma tarefa a um só tempo
temos que criar nossas próprias threads.
Globalcode – Open4education
Gerenciador de Tarefas
Globalcode – Open4education
UMA TAREFA
PESADA
UM RECURSO
CRÍTICO
QUATRO
THREADS
Globalcode – Open4education
Motivações
Melhorar a experiência do usuário
Não travar a tela enquanto processa algo “pesado”
Velocidade de execução de uma tarefa
Chamadas REST, que por envolver latência de
rede, costuma demorar um pouco mais
Escalabilidade
Monitoração de eventos
Globalcode – Open4education
Pense de forma assíncrona
A, B, C, D, E ...
A, D, X, M, N, F, J, O, B ...
Blocante X Não Blocante
Comece a pensar em tarefas, tarefas paralelas.
Globalcode – Open4education
No Delphi
Temos a clássica System.Classes.TThread
Abstrai a API do S.O.
Criamos classes descendentes e implementamos o método
Execute
Temos também a Thread anônima
Desde o Delphi XE7 temos a biblioteca PPL em System.Threading
Biblioteca de Programação Paralela
Cuida do balanceamento da execução das threads
Torna mais fácil a adoção de paralelismo
TParallel.For – TTask - IFuture
Globalcode – Open4education
E o TTimer?
Não é uma Thread!
É um mecanismo onde o S.O.
envia uma mensagem ao nosso
processo que reage executando
um código pela Thread
principal.
Globalcode – Open4education
TParallel.For
Forma marota de delegar uma tarefa “repetitiva” à várias threads
e aguardar o encerramento dela.
Recebe três parâmetros:
Valor inicial
Valor máximo
Método anônimo que receberá o valor
Esse método anônimo será executado em um contexto
thread
Possui diversas outras assinaturas!
Globalcode – Open4education
TTask - ITask
TTask.Create recebe um método anônimo que
será executado em um contexto de thread.
Daí damos .Start e vida que segue.
Preferencialmente podemos invocar o método de
classe .Run que recebe um método anônimo
A instância de TTask “morrerá” sozinha quando a
thread for finalizada – não se preocupe.
Globalcode – Open4education
TTask - IFuture
A classe TTask possui o método de classe .Future:
O objetivo é delegar uma função que será executado em
um contexto de thread
E recuperar o resultado desta função no... futuro!
Por isso que .Future é um método com parâmetro
genérico onde definimos o tipo da reposta
E a resposta recuperamos com .Value
Globalcode – Open4education
Cuidado com a GUI
TThread.Synchronize deve ser invocada nos trechos que lidam
com os componentes de interface – pois eles não são à prova de
thread
Temos também TThread.Queue, que agenda a execução da tarefa
O código em questão é executado de forma sincronizada com a
thread principal
Recebem dois parâmetros:
Referência à uma thread, em geral a corrente
Método anônimo que será executado
Globalcode – Open4education
Colocando ordem
System.SyncObjs.TCriticalSection
System.SysUtils.TMultiReadExclusiveWriteSynchronizer
TEvent
InterlockedIncrement, InterlockedDecrement
WaitForMultipleObjects
System.TMonitor
SetThreadAffinityMask
threadvar
Globalcode – Open4education
Quando não aplicar
Disparar centenas de threads eventualmente
parece uma boa ideia porque o nosso código fica
linear
Porém se elas disputam um mesmo recurso crítico
vai demandar muito recurso e não irá resolver
problemas de performance – podendo até piorar
Globalcode – Open4education
Obrigado!
Exemplos da palestra: https://bit.ly/2JYbZel
Apostila sobre TThread: http://bit.ly/arrayof_thread
Vídeo sobre PPL: https://bit.ly/2O6f2GS
Threads no meu ERP: https://bit.ly/2GxzHgX
PPL: https://bit.ly/2YWgwo1
Concorrência em Thread: https://bit.ly/2GjUftc
Vídeo interessante: https://bit.ly/2XSidGK
Paralelismo na prática: Threads de uma vez por todas e sem medo!

Mais conteúdo relacionado

Semelhante a Paralelismo na prática: Threads de uma vez por todas e sem medo!

Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsHelder da Rocha
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepLoiane Groner
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Adam Victor Brandizzi
 
TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#
TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#
TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#Diego Gabriel Cardoso
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiaTDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiatdc-globalcode
 
Trabalhando com Threads em JAVA
Trabalhando com Threads em JAVATrabalhando com Threads em JAVA
Trabalhando com Threads em JAVAMarcio Palheta
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...rafaelov
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreadingArmando Daniel
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Charles Fortes
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - ThreadsGlaucio Scheibel
 

Semelhante a Paralelismo na prática: Threads de uma vez por todas e sem medo! (20)

Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 
Thread Java
Thread JavaThread Java
Thread Java
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#
TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#
TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Threads
ThreadsThreads
Threads
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Net - Threads
Net - ThreadsNet - Threads
Net - Threads
 
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiaTDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
 
Trabalhando com Threads em JAVA
Trabalhando com Threads em JAVATrabalhando com Threads em JAVA
Trabalhando com Threads em JAVA
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreading
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 

Mais de Mario Guedes

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitMario Guedes
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISMario Guedes
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumMario Guedes
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTMario Guedes
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - CookbookMario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsMario Guedes
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsMario Guedes
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis Mario Guedes
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisMario Guedes
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Mario Guedes
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Mario Guedes
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiMario Guedes
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Mario Guedes
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiMario Guedes
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Mario Guedes
 
BOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaBOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaMario Guedes
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Mario Guedes
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosMario Guedes
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBMario Guedes
 

Mais de Mario Guedes (20)

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST Summit
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDIS
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da Ethereum
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - Cookbook
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e Redis
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?
 
BOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaBOT: Conversando com o seu sistema
BOT: Conversando com o seu sistema
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
 

Paralelismo na prática: Threads de uma vez por todas e sem medo!

  • 1. Globalcode – Open4education Paralelismo na prática: Threads de uma vez por todas e sem medo! Carlos Agnes & Mario Guedes
  • 2. Globalcode – Open4education Agenda Mario Guedes – mario@arrayof.io https://arrayof.io Motivações para dominar paralelismo Carlos Agnes - tatu@taturs.com http://taturs.com Exemplos práticos para o dia à dia
  • 3. Globalcode – Open4education O que é paralelismo? Capacidade de executar mais de uma tarefa ao mesmo tempo, ou seja, lado a lado, ou seja, de forma paralela. Ao mesmo tempo numas: Depende da quantidade de CPU presente no dispositivo e da concorrência com os outros processo e threads.
  • 4. Globalcode – Open4education Mas o que é thread? Thread, ou segmento, é a unidade básica de execução em um sistema operacional. Um software tem, no mínimo, uma thread: A thread principal. Para executarmos mais de uma tarefa a um só tempo temos que criar nossas próprias threads.
  • 6. Globalcode – Open4education UMA TAREFA PESADA UM RECURSO CRÍTICO QUATRO THREADS
  • 7. Globalcode – Open4education Motivações Melhorar a experiência do usuário Não travar a tela enquanto processa algo “pesado” Velocidade de execução de uma tarefa Chamadas REST, que por envolver latência de rede, costuma demorar um pouco mais Escalabilidade Monitoração de eventos
  • 8. Globalcode – Open4education Pense de forma assíncrona A, B, C, D, E ... A, D, X, M, N, F, J, O, B ... Blocante X Não Blocante Comece a pensar em tarefas, tarefas paralelas.
  • 9. Globalcode – Open4education No Delphi Temos a clássica System.Classes.TThread Abstrai a API do S.O. Criamos classes descendentes e implementamos o método Execute Temos também a Thread anônima Desde o Delphi XE7 temos a biblioteca PPL em System.Threading Biblioteca de Programação Paralela Cuida do balanceamento da execução das threads Torna mais fácil a adoção de paralelismo TParallel.For – TTask - IFuture
  • 10. Globalcode – Open4education E o TTimer? Não é uma Thread! É um mecanismo onde o S.O. envia uma mensagem ao nosso processo que reage executando um código pela Thread principal.
  • 11. Globalcode – Open4education TParallel.For Forma marota de delegar uma tarefa “repetitiva” à várias threads e aguardar o encerramento dela. Recebe três parâmetros: Valor inicial Valor máximo Método anônimo que receberá o valor Esse método anônimo será executado em um contexto thread Possui diversas outras assinaturas!
  • 12. Globalcode – Open4education TTask - ITask TTask.Create recebe um método anônimo que será executado em um contexto de thread. Daí damos .Start e vida que segue. Preferencialmente podemos invocar o método de classe .Run que recebe um método anônimo A instância de TTask “morrerá” sozinha quando a thread for finalizada – não se preocupe.
  • 13. Globalcode – Open4education TTask - IFuture A classe TTask possui o método de classe .Future: O objetivo é delegar uma função que será executado em um contexto de thread E recuperar o resultado desta função no... futuro! Por isso que .Future é um método com parâmetro genérico onde definimos o tipo da reposta E a resposta recuperamos com .Value
  • 14. Globalcode – Open4education Cuidado com a GUI TThread.Synchronize deve ser invocada nos trechos que lidam com os componentes de interface – pois eles não são à prova de thread Temos também TThread.Queue, que agenda a execução da tarefa O código em questão é executado de forma sincronizada com a thread principal Recebem dois parâmetros: Referência à uma thread, em geral a corrente Método anônimo que será executado
  • 15. Globalcode – Open4education Colocando ordem System.SyncObjs.TCriticalSection System.SysUtils.TMultiReadExclusiveWriteSynchronizer TEvent InterlockedIncrement, InterlockedDecrement WaitForMultipleObjects System.TMonitor SetThreadAffinityMask threadvar
  • 16. Globalcode – Open4education Quando não aplicar Disparar centenas de threads eventualmente parece uma boa ideia porque o nosso código fica linear Porém se elas disputam um mesmo recurso crítico vai demandar muito recurso e não irá resolver problemas de performance – podendo até piorar
  • 17. Globalcode – Open4education Obrigado! Exemplos da palestra: https://bit.ly/2JYbZel Apostila sobre TThread: http://bit.ly/arrayof_thread Vídeo sobre PPL: https://bit.ly/2O6f2GS Threads no meu ERP: https://bit.ly/2GxzHgX PPL: https://bit.ly/2YWgwo1 Concorrência em Thread: https://bit.ly/2GjUftc Vídeo interessante: https://bit.ly/2XSidGK