SlideShare uma empresa Scribd logo
1 de 14
Globalcode – Open4education
Diego Cardoso
TechWar: Threads, ThreadPools e Tasks em C#
Julho/2017
Globalcode – Open4education
Trilha .Net
por Diego Cardoso em Julho/2017
TechWar: Threads, ThreadPools e Tasks em C#
Globalcode – Open4education
• Marido (Paty) e Pai (Bia)
• Graduado em Sistemas da Informaçãona FSA
• Pós-Graduado emArquitetura de Software na FIAP
• Certificado Microsoft:MCTS
• Trabalho na GFT(Sorocaba)
• 10 anosAnalisando, Codificando e Migrando
• Entusiasta com foco emArquitetura e MetodologiasAgeis
• Guitarristaenferrujado e nas horas vagas
/diegosmorf
Globalcode – Open4education
Agenda
TechWars
Problema Comum
Recaptulando Conceitos
Processamento Paralelo
Possiveis Solucoes
Thread
ThreadPool
Task
Globalcode – Open4education
TechWars
A long time ago in a galaxy far, far away ….
Episodio Alternativo: TDC SP 2017
O Imperio criou uma arma chamada Estrela da Morte
Seu SuperLaser e capaz de destruir um planeta inteiro
Seu primeiro Teste foi um sucesso ( Planeta Alderaan )
Os Rebeldes descobriram sua a unica fragilidade:
Seu SuperLaser demora para carregar ( 10 segundos)
Seu escudo fica inativo enquanto carregamento em progresso
Missao do Imperio
Melhorar o processo de carregamento e evitar o ataque dos Rebeldes ( 4 segundos)
#VamosPraDemo
Globalcode – Open4education
Problema Comum
Meu processo esta lento
Desafios
Interdependencia entre os passos
Lidar com passos realmente lentos
Lidar com integracoes externas (muito comum)
Codigo Legado nao ser thread-safe
Possiveis Abordagens
Reduzir o tempo de cada passo atraves de refactors
Executar passos em paralelo
#ParalelizeSeuProcesso
Globalcode – Open4education
Processamento em Paralelo
Beneficios
Enriquece experiencia do usuario ( UX)
Melhoria de performance (escalabilidade)
Reducao de Infraestrutura
Lidar com integracoes externas (muito comum)
Dificuldades
Codigo nao e trivial
Debugging nao e simples
Testar
Migrar codigo existente (not thread safe)
#ParalelizeSeuProcesso
Globalcode – Open4education
Recaptulando Conceitos
Composição de um processo:
Unidade
de
Execução
Processo
Memoria
Thread
Principal
Thread 1
Thread 2
I/O
Globalcode – Open4education
Processo vs Thread
Processo:
Abstração da maquina
atraves de uma area
exclusiva para o programa
Contadores
Stacks
Registradores
Memoria
Thread:
Ilusão (ou realidade) de uma
sequencia indenpendente de
instrucoes
Contadores
Stacks
Registradores
Memoria Compartilhada
Globalcode – Open4education
Precisamos de uma solucao
Darth Vader lhe espera em sua sala
Globalcode – Open4education
Solucao 1 - Thread
Beneficios
Controle Direto da Thread (estado corrente no SO)
Abort / Suspend / Resume / Prioridade / Stack
Performance ( libera thread principal)
Dificuldades
Todo controle deve ser implementado ( semaforo / mutex )
Tratamento de erro
Overhead de CPU durante mudanca de contexto
Possivel violacao do Principio: Responsabilidade Unica
#VamosPraDemo
Globalcode – Open4education
Solução 2 - ThreadPool
Beneficios
Wrapper Nativo na CLR (.net 2.0)
Codigo mais simples ( vs Thread)
Reaproveitamento de recursos
Performance ( menor custo na mudanca de contexto)
Abstracao no controle da Thread (agendamento)
Dificuldades
Menor controle sobre as Threads (agendamento)
Processos ficam enfileirados quando limite alcancado (configurado)
Possivel violacao do Principio: Responsabilidade Unica
#VamosPraDemo
Globalcode – Open4education
Solucao 3 - Tasks
Beneficios
TPL - Task Parallel Library (.net 4.0)
Codigo mais simples ( abstracao Thread e ThreadPool)
Task = Processo + safe memory sharing – cost of OS process
Performance (reaproveitamento de recursos)
Motivacao para:
Async/Await ( I/O Bound)
Parallel.For e Parallel.ForEach ( CPU Bound)
Dificuldades
Menor controle sobre as Threads (agendamento)
Cuidades com os limites de recursos
#VamosPraDemo
Julho/2017 #Thanks
/diegosmorf
Diego Cardoso
TechWar: Threads, ThreadPools e Tasks em C#

Mais conteúdo relacionado

Mais procurados

MediaKit 2016 do DatabaseCast
MediaKit 2016 do DatabaseCastMediaKit 2016 do DatabaseCast
MediaKit 2016 do DatabaseCastpichiliani
 
Conheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live ShareConheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live ShareLetticia Nicoli
 
A primeira linguagem que todo programador deve aprender
A primeira linguagem que todo programador deve aprenderA primeira linguagem que todo programador deve aprender
A primeira linguagem que todo programador deve aprenderLF Bittencourt
 
Aplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive ServicesAplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive ServicesGabriel Schade Cardoso
 
Dividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NETDividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NETCaliel Costa
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Paulo Cesar Ortins Brito
 
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Adolfo Neto
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka? pichiliani
 

Mais procurados (10)

Refatorar é preciso! 2.0
Refatorar é preciso! 2.0Refatorar é preciso! 2.0
Refatorar é preciso! 2.0
 
MediaKit 2016 do DatabaseCast
MediaKit 2016 do DatabaseCastMediaKit 2016 do DatabaseCast
MediaKit 2016 do DatabaseCast
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
 
Conheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live ShareConheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live Share
 
A primeira linguagem que todo programador deve aprender
A primeira linguagem que todo programador deve aprenderA primeira linguagem que todo programador deve aprender
A primeira linguagem que todo programador deve aprender
 
Aplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive ServicesAplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive Services
 
Dividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NETDividindo para Conquistar: microserviços com o jeitinho .NET
Dividindo para Conquistar: microserviços com o jeitinho .NET
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#
 
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 

Semelhante a TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#

Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowRicardo Longa
 
TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...
TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...
TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...tdc-globalcode
 
Design de Software com ASP.NET MVC
Design de Software com ASP.NET MVCDesign de Software com ASP.NET MVC
Design de Software com ASP.NET MVCWaldyr Felix
 
Computação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaComputação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaDr. Spock
 
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.  Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo. rodrigorahman
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...tdc-globalcode
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineEder Magalhães
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Mario Guedes
 
TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...
TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...
TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...tdc-globalcode
 
Dos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraDos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraRafael Chaves
 
Dojo com Arduino e Program-ME
Dojo com Arduino e Program-MEDojo com Arduino e Program-ME
Dojo com Arduino e Program-MEDr. Spock
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPRafael Moreira
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...tdc-globalcode
 
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015André Curvello
 

Semelhante a TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C# (20)

Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 
Revolução Go TDC 2016
Revolução Go TDC 2016Revolução Go TDC 2016
Revolução Go TDC 2016
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools Flow
 
TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...
TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...
TDC2016SP - Trilha Quebrando um monolítico J2EE, uma história de trás das tri...
 
Design de Software com ASP.NET MVC
Design de Software com ASP.NET MVCDesign de Software com ASP.NET MVC
Design de Software com ASP.NET MVC
 
Computação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaComputação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e Java
 
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.  Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!
 
TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...
TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...
TDC2018SP | Trilha IA - Big Data e Machine Learning: Desafios e oportunidades...
 
Dos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraDos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestra
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
Dojo com Arduino e Program-ME
Dojo com Arduino e Program-MEDojo com Arduino e Program-ME
Dojo com Arduino e Program-ME
 
Php Experience 2016 - Mercado de Trabalho para Elefantes
Php Experience 2016 - Mercado de Trabalho para ElefantesPhp Experience 2016 - Mercado de Trabalho para Elefantes
Php Experience 2016 - Mercado de Trabalho para Elefantes
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SP
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
 
TDC 2012 - JDF
TDC 2012 - JDFTDC 2012 - JDF
TDC 2012 - JDF
 
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
 
Softwares no Cluster - Ney Lemke
Softwares no Cluster - Ney LemkeSoftwares no Cluster - Ney Lemke
Softwares no Cluster - Ney Lemke
 

Mais de Diego Gabriel Cardoso

2024 Facens Semana Academica Carreira e o mercado de TI
2024 Facens Semana Academica Carreira  e o mercado de TI2024 Facens Semana Academica Carreira  e o mercado de TI
2024 Facens Semana Academica Carreira e o mercado de TIDiego Gabriel Cardoso
 
Facens - Plugin - A Evolução na carreira de TI
Facens - Plugin -  A Evolução na carreira de TIFacens - Plugin -  A Evolução na carreira de TI
Facens - Plugin - A Evolução na carreira de TIDiego Gabriel Cardoso
 
Facens - Plugin - Usando Inteligência Artificial para aprimorar seus conheci...
Facens - Plugin -  Usando Inteligência Artificial para aprimorar seus conheci...Facens - Plugin -  Usando Inteligência Artificial para aprimorar seus conheci...
Facens - Plugin - Usando Inteligência Artificial para aprimorar seus conheci...Diego Gabriel Cardoso
 
2020 05-tech saturday-devsecops-#2-v03
2020 05-tech saturday-devsecops-#2-v032020 05-tech saturday-devsecops-#2-v03
2020 05-tech saturday-devsecops-#2-v03Diego Gabriel Cardoso
 
DevSecOps - Colocando segurança na esteira
DevSecOps - Colocando segurança na esteiraDevSecOps - Colocando segurança na esteira
DevSecOps - Colocando segurança na esteiraDiego Gabriel Cardoso
 
DevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteiraDevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteiraDiego Gabriel Cardoso
 
DevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteiraDevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteiraDiego Gabriel Cardoso
 
TDC SP 2019 - Trilha .NET - Clean Architecture
TDC SP 2019 - Trilha .NET - Clean ArchitectureTDC SP 2019 - Trilha .NET - Clean Architecture
TDC SP 2019 - Trilha .NET - Clean ArchitectureDiego Gabriel Cardoso
 
2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...
2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...
2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...Diego Gabriel Cardoso
 
2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean Architecture
2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean Architecture2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean Architecture
2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean ArchitectureDiego Gabriel Cardoso
 
2019 Facens Semana Tecnologia- Arquitetura distribuída na Nuvem
2019 Facens Semana Tecnologia- Arquitetura distribuída na Nuvem2019 Facens Semana Tecnologia- Arquitetura distribuída na Nuvem
2019 Facens Semana Tecnologia- Arquitetura distribuída na NuvemDiego Gabriel Cardoso
 
TDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteira
TDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteiraTDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteira
TDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteiraDiego Gabriel Cardoso
 

Mais de Diego Gabriel Cardoso (12)

2024 Facens Semana Academica Carreira e o mercado de TI
2024 Facens Semana Academica Carreira  e o mercado de TI2024 Facens Semana Academica Carreira  e o mercado de TI
2024 Facens Semana Academica Carreira e o mercado de TI
 
Facens - Plugin - A Evolução na carreira de TI
Facens - Plugin -  A Evolução na carreira de TIFacens - Plugin -  A Evolução na carreira de TI
Facens - Plugin - A Evolução na carreira de TI
 
Facens - Plugin - Usando Inteligência Artificial para aprimorar seus conheci...
Facens - Plugin -  Usando Inteligência Artificial para aprimorar seus conheci...Facens - Plugin -  Usando Inteligência Artificial para aprimorar seus conheci...
Facens - Plugin - Usando Inteligência Artificial para aprimorar seus conheci...
 
2020 05-tech saturday-devsecops-#2-v03
2020 05-tech saturday-devsecops-#2-v032020 05-tech saturday-devsecops-#2-v03
2020 05-tech saturday-devsecops-#2-v03
 
DevSecOps - Colocando segurança na esteira
DevSecOps - Colocando segurança na esteiraDevSecOps - Colocando segurança na esteira
DevSecOps - Colocando segurança na esteira
 
DevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteiraDevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteira
 
DevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteiraDevSecOps: Colocando segurança na esteira
DevSecOps: Colocando segurança na esteira
 
TDC SP 2019 - Trilha .NET - Clean Architecture
TDC SP 2019 - Trilha .NET - Clean ArchitectureTDC SP 2019 - Trilha .NET - Clean Architecture
TDC SP 2019 - Trilha .NET - Clean Architecture
 
2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...
2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...
2019 MVPConf Entenda como DevOps pode ajudar a visão e controle sobre desenvo...
 
2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean Architecture
2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean Architecture2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean Architecture
2019 Global Azure Bootcamp: AzureDevops + NET Core + Clean Architecture
 
2019 Facens Semana Tecnologia- Arquitetura distribuída na Nuvem
2019 Facens Semana Tecnologia- Arquitetura distribuída na Nuvem2019 Facens Semana Tecnologia- Arquitetura distribuída na Nuvem
2019 Facens Semana Tecnologia- Arquitetura distribuída na Nuvem
 
TDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteira
TDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteiraTDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteira
TDC2016 - SP - Trilha Xamarin - Entrega Contínua com Xamarin #MonteSuaEsteira
 

TDC SP 2017 Trilha .NET - TechWar: Threads, ThreadPools e Tasks em C#

  • 1. Globalcode – Open4education Diego Cardoso TechWar: Threads, ThreadPools e Tasks em C# Julho/2017
  • 2. Globalcode – Open4education Trilha .Net por Diego Cardoso em Julho/2017 TechWar: Threads, ThreadPools e Tasks em C#
  • 3. Globalcode – Open4education • Marido (Paty) e Pai (Bia) • Graduado em Sistemas da Informaçãona FSA • Pós-Graduado emArquitetura de Software na FIAP • Certificado Microsoft:MCTS • Trabalho na GFT(Sorocaba) • 10 anosAnalisando, Codificando e Migrando • Entusiasta com foco emArquitetura e MetodologiasAgeis • Guitarristaenferrujado e nas horas vagas /diegosmorf
  • 4. Globalcode – Open4education Agenda TechWars Problema Comum Recaptulando Conceitos Processamento Paralelo Possiveis Solucoes Thread ThreadPool Task
  • 5. Globalcode – Open4education TechWars A long time ago in a galaxy far, far away …. Episodio Alternativo: TDC SP 2017 O Imperio criou uma arma chamada Estrela da Morte Seu SuperLaser e capaz de destruir um planeta inteiro Seu primeiro Teste foi um sucesso ( Planeta Alderaan ) Os Rebeldes descobriram sua a unica fragilidade: Seu SuperLaser demora para carregar ( 10 segundos) Seu escudo fica inativo enquanto carregamento em progresso Missao do Imperio Melhorar o processo de carregamento e evitar o ataque dos Rebeldes ( 4 segundos) #VamosPraDemo
  • 6. Globalcode – Open4education Problema Comum Meu processo esta lento Desafios Interdependencia entre os passos Lidar com passos realmente lentos Lidar com integracoes externas (muito comum) Codigo Legado nao ser thread-safe Possiveis Abordagens Reduzir o tempo de cada passo atraves de refactors Executar passos em paralelo #ParalelizeSeuProcesso
  • 7. Globalcode – Open4education Processamento em Paralelo Beneficios Enriquece experiencia do usuario ( UX) Melhoria de performance (escalabilidade) Reducao de Infraestrutura Lidar com integracoes externas (muito comum) Dificuldades Codigo nao e trivial Debugging nao e simples Testar Migrar codigo existente (not thread safe) #ParalelizeSeuProcesso
  • 8. Globalcode – Open4education Recaptulando Conceitos Composição de um processo: Unidade de Execução Processo Memoria Thread Principal Thread 1 Thread 2 I/O
  • 9. Globalcode – Open4education Processo vs Thread Processo: Abstração da maquina atraves de uma area exclusiva para o programa Contadores Stacks Registradores Memoria Thread: Ilusão (ou realidade) de uma sequencia indenpendente de instrucoes Contadores Stacks Registradores Memoria Compartilhada
  • 10. Globalcode – Open4education Precisamos de uma solucao Darth Vader lhe espera em sua sala
  • 11. Globalcode – Open4education Solucao 1 - Thread Beneficios Controle Direto da Thread (estado corrente no SO) Abort / Suspend / Resume / Prioridade / Stack Performance ( libera thread principal) Dificuldades Todo controle deve ser implementado ( semaforo / mutex ) Tratamento de erro Overhead de CPU durante mudanca de contexto Possivel violacao do Principio: Responsabilidade Unica #VamosPraDemo
  • 12. Globalcode – Open4education Solução 2 - ThreadPool Beneficios Wrapper Nativo na CLR (.net 2.0) Codigo mais simples ( vs Thread) Reaproveitamento de recursos Performance ( menor custo na mudanca de contexto) Abstracao no controle da Thread (agendamento) Dificuldades Menor controle sobre as Threads (agendamento) Processos ficam enfileirados quando limite alcancado (configurado) Possivel violacao do Principio: Responsabilidade Unica #VamosPraDemo
  • 13. Globalcode – Open4education Solucao 3 - Tasks Beneficios TPL - Task Parallel Library (.net 4.0) Codigo mais simples ( abstracao Thread e ThreadPool) Task = Processo + safe memory sharing – cost of OS process Performance (reaproveitamento de recursos) Motivacao para: Async/Await ( I/O Bound) Parallel.For e Parallel.ForEach ( CPU Bound) Dificuldades Menor controle sobre as Threads (agendamento) Cuidades com os limites de recursos #VamosPraDemo
  • 14. Julho/2017 #Thanks /diegosmorf Diego Cardoso TechWar: Threads, ThreadPools e Tasks em C#