SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
Modelo APM em .NET 
por 
Pedro Gabriel 
O porquê da utilização/necessidade de uma abordagem 
assíncrona : 
Esta necessidade surge devido, principalmente à evolução das arquitecturas que 
passaram a ser multi-core em vez de single-core. Anteriormente, quando falávamos em 
aplicações “escaláveis”, qualquer aplicação single-thread era escalável num ambiente 
single-core, uma vez que todos os melhoramentos feitos aos processadores da época 
eram baseados numa melhor performance em single-core. 
Com o aparecimento de arquitecturas multi-core, qualquer aplicação single-thread 
deixou de ser escalável, pois não tira partido das funcionalidades das novas 
arquitecturas. Por suas vez, as linguagens de programação evoluiram de tal forma que 
praticamente todas as linguagens de alto nível suportam este tipo de abordagem, dando 
assim a possibilidade do programador criar aplicações multi-thread. 
Principais diferenças entre “modelos”: 
Normalmente, perante programas single-thread o fluxo de actividades pode ser 
descrito da seguinte forma: 
Estamos então, na presença de acções sequênciais, que mesmo sendo independentes ou 
não, só serão executadas consoante a ordém disposta. 
1
Modelo APM em .NET 
por 
Pedro Gabriel 
No que toca a um programa multi-thread, podemos descrever o fluxo de acções da 
seguinte forma: 
Por esta ordem de ideias, cada acção é executada por uma Thread diferente, deixando 
ao programador a gestão do fluxo do seu programa conforme o tempo que cada acção 
pode levar a ser completada. Com esta abordagem, está implicito um overhead que 
pode ser criado se uma aplicação tiver mais Threads do que processadores lógicos para 
uma determinada máquina. 
Tipicamente, estes custos podem ser descritos da seguinte forma: 
● Custos Estáticos: Estão associados à memória utilizada para conter 
estruturas de dados relativas às Threads, e ao espaço de endereçamento 
alocado. Proporcional ao número de Threads. 
● Custos Dinâmicos: Associados à actividade de scheduling. Quantas mais 
Threads estiverem em execução - READY - maior será a actividade de 
Scheduling. Proporcional ao número de Threads “Ready” para além do nº de 
cores. 
A este modelo está ainda adjacente a necessidade de implementar mecanismos de 
sincronização de Threads relativamente ao acesso a dados, por forma a manter os 
mesmos no estado correcto. 
2
Modelo APM em .NET 
por 
Pedro Gabriel 
Por último, resta demonstrar o fluxo de uma abordagem/modelo assíncrono. 
Neste modelo, as ações são executadas de forma intercalada, com a gestão realizada 
apenas por uma Thread. 
Uma das grandes vantagens deste modelo, é o facto de o programador poder dar 
“ordens” às ações a realizar. Do ponto de vista do segundo modelo (multi-thread), ações 
podem ser interrompidas consoante o “desejo” do Sistema Operativo. Neste último 
modelo é o programador quem pode dar ordem de interrupção, mantendo assim o 
controlo sobre as ações. 
3
Modelo APM em .NET 
por 
Pedro Gabriel 
Após a descrição da motivação para o uso de programação assíncrona e uma breve 
descrição dos modelos mais utilizados, vejamos agora um modelo concreto que foi o 
principal padrão utilizado pela framework .NET antes da versão 4.5. 
Este documento mostra ainda os três tipos de rendezvous que integram o APM: 
Wait-Until Done, Polling, Callback. 
Asynchronous Programming Model (APM): 
Este padrão permite-nos executar várias ações em diferentes Threads. Várias classes da 
framework .NET suportam este padrão através do fornecimento de métodos que 
seguem a cnvenção BeginXXX e EndXXX. Para demonstrar este mesmo padrão, iremos 
utilizada o método Read da classe Stream. 
Primeiro, vejamos a versão sincrona: 
public int Read (byte[] buffer, int offset, int size); 
De seguida, a versão que suporta APM: 
public IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback callback, object state); 
public int EndRead (IAsyncResult asyncResult); 
Outra particularidade é o tipo de retorno que está envolvido nestes métodos da versão 
APM. O método que inicia a operação (Begin) devolve um objecto do tipo IAsyncResult 
que, basicamente, é um token que representa a operação. 
Existe também um callback, que é basicamente uma função que será executada 
mediante certas condições. Neste caso concreto, este callback só é executado quando a 
operação assíncrona termina ou quando ocorre um erro na sua realização. 
A definição do callback é dada pelo seguinte delegate: 
public delegate void AsyncCallback (IAsyncResult ar); 
Quem tratar deste callback/delegate invoca o método que devolve o resultado final da 
operação assíncrona (End). É também responsável por re-lançar um erro caso este 
ocorra. 
4
Modelo APM em .NET 
por 
Pedro Gabriel 
Vejamos então código-fonte que demonstra este padrão: 
É de notar então, que na construcção do objecto do tipo FileStream é necessária a 
indicação da intenção futura de realizar uma leitura assíncrona. De modo a realizar a 
leitura deste mesmo modo, são invocados os métodos que suportam a versão APM, 
BeginRead e EndRead. O primeiro recebe todos os argumentos que o método Read 
recebe, e mais dois que efectuam o suporte ao modelo APM - Callback e Object-State. 
Note-se ainda o retorno de uma objecto IAsyncResult que é posteriormente passado ao 
método End para obter o resultado final. 
5
Modelo APM em .NET 
por 
Pedro Gabriel 
Rendezvous 1 - Wait-Until Done: 
Este tipo de rendezvous permite iniciar uma acção assíncrona, realizar outro trabalho, e 
posteriormente voltar para verificar se a acção foi completada entretanto. A verificação 
irá bloquear até que a acção seja completada. 
Percebemos então que, qualquer código que seja colocado entre as chamas dos 
métodos APM será executado enquanto o mesmo pedaço de código lê o ficheiro de 
texto. É uma abordagem possivel para aplicações que pretendam ter um grau de 
resposta alto perante um elevado número de acções a realizar. 
6
Modelo APM em .NET 
por 
Pedro Gabriel 
Rendezvous 2 - Polling : 
Este tipo de rendezvous envolve a Thread que pretende ser notificada directamente, ou 
seja, é esta que tem de verificar, ao longo de um periodo, a realização da acção 
assíncrona que iniciou. Tem a vantagem de não bloquear enquanto realiza as 
verificações. A verificação é feita através da chamada da propriedade de IsComplete do 
resultado devolvido pelo método BeginXXX. 
Código acima demonstra que, é possivel realizar outro trabalho, à medida que se 
verifica a realização da acção inicial, sem que esta bloqueie a Thread envolvida. 
7
Modelo APM em .NET 
por 
Pedro Gabriel 
Rendezvous 3 - Callback : 
Este último rendezvous obriga à passagem de um método callback que será executado 
quando a acção assíncrona terminar ou se gerar erro. É desta forma que ficamos a saber 
que a acção terminou. Por esta lógica, é dentro do callback que iremos obter o resultado 
final da nossa acçao assíncrona, através do método EndXX. 
Na prática, o que o método BeginXX está a fazer é colocar a acção assíncrona numa fila 
de acções (queue), que através de Threads mantidas pela ThreadPool internal do .NET, 
será realizada mais tarde. A forma que a framework tem de avisar a Thread que iniciou a 
acção é invocar o callback fornecido pela Thread inicial. 
Se o callback for: 
Então a chamada será feita da seguinte forma: 
fs.BeginRead(s_data, 0, s_data.Length, ReadIsDone, fs); 
Como podemos ver, a obtenção do resultado é feita dentro do callback. O mesmo 
resultado é tratado lá dentro, uma vez que não é permitido qualquer retorno. Relembro 
que a assinatura do método tem que satisfazer o delegate demonstrado anteriormente. 
8

Mais conteúdo relacionado

Mais procurados

Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoAlexandre Duarte
 
Estrutura de controle repetição C++
Estrutura de controle repetição C++Estrutura de controle repetição C++
Estrutura de controle repetição C++Sedu
 
Aula13 - Estrutura de repetição (for e while) - PHP
Aula13 - Estrutura de repetição (for e while) - PHPAula13 - Estrutura de repetição (for e while) - PHP
Aula13 - Estrutura de repetição (for e while) - PHPJorge Ávila Miranda
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresAnderson Favaro
 
Mutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosMutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosThiago Poiani
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2Eric Lemes
 
Aula7 algoritmos computacionais
Aula7 algoritmos computacionaisAula7 algoritmos computacionais
Aula7 algoritmos computacionaisCarlos Braga
 
2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicos
2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicos2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicos
2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicosComputação Depressão
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controleProfessor Samuel Ribeiro
 
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...Joao Galdino Mello de Souza
 
Entendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL ServerEntendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL ServerLuciano Moreira
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - ThreadsGlaucio Scheibel
 
Apresentação análise e simulação de um "Job Shop"
Apresentação análise e simulação de um "Job Shop"Apresentação análise e simulação de um "Job Shop"
Apresentação análise e simulação de um "Job Shop"Paulo Henrique Santini
 
Laboratório de Programação II: Criptografia em C
Laboratório de Programação II: Criptografia em CLaboratório de Programação II: Criptografia em C
Laboratório de Programação II: Criptografia em CAlex Camargo
 

Mais procurados (17)

Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: Sincronização
 
Pvm
PvmPvm
Pvm
 
Estrutura de controle repetição C++
Estrutura de controle repetição C++Estrutura de controle repetição C++
Estrutura de controle repetição C++
 
Aula13 - Estrutura de repetição (for e while) - PHP
Aula13 - Estrutura de repetição (for e while) - PHPAula13 - Estrutura de repetição (for e while) - PHP
Aula13 - Estrutura de repetição (for e while) - PHP
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
Mutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosMutexes, Monitores e Semáforos
Mutexes, Monitores e Semáforos
 
Resumo vliw very long instrution word
Resumo vliw very long instrution wordResumo vliw very long instrution word
Resumo vliw very long instrution word
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
 
Aula7 algoritmos computacionais
Aula7 algoritmos computacionaisAula7 algoritmos computacionais
Aula7 algoritmos computacionais
 
2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicos
2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicos2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicos
2009 1 - sistemas operacionais - aula 5 - semaforos e problemas classicos
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controle
 
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
 
Entendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL ServerEntendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL Server
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
TWP40 Revisão Geral 3
TWP40 Revisão Geral 3TWP40 Revisão Geral 3
TWP40 Revisão Geral 3
 
Apresentação análise e simulação de um "Job Shop"
Apresentação análise e simulação de um "Job Shop"Apresentação análise e simulação de um "Job Shop"
Apresentação análise e simulação de um "Job Shop"
 
Laboratório de Programação II: Criptografia em C
Laboratório de Programação II: Criptografia em CLaboratório de Programação II: Criptografia em C
Laboratório de Programação II: Criptografia em C
 

Semelhante a Modelo APM em .NET para programação assíncrona

Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia J Chaves Silva
 
Tutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMITutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMISimão Neto
 
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Medindo e Modelando o Desempenho de Aplicações em um Ambiente VirtualMedindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Medindo e Modelando o Desempenho de Aplicações em um Ambiente VirtualRafael Reis
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Tópicos - Computacao Paralela Programação (Visão geral)
Tópicos - Computacao Paralela Programação (Visão geral)Tópicos - Computacao Paralela Programação (Visão geral)
Tópicos - Computacao Paralela Programação (Visão geral)Luiz Arthur
 
Artigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraArtigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraGoncalvinho
 
Paralelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto EscalarParalelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto EscalarWendel Oliveira
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.jsEdgar Eler
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetosFer Nando
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetosFabiano Rodrigues
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxItamarGoncalves2
 

Semelhante a Modelo APM em .NET para programação assíncrona (20)

Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia
 
Lamport
LamportLamport
Lamport
 
Tutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMITutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMI
 
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Medindo e Modelando o Desempenho de Aplicações em um Ambiente VirtualMedindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Tópicos - Computacao Paralela Programação (Visão geral)
Tópicos - Computacao Paralela Programação (Visão geral)Tópicos - Computacao Paralela Programação (Visão geral)
Tópicos - Computacao Paralela Programação (Visão geral)
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
XML-RPC.pdf
XML-RPC.pdfXML-RPC.pdf
XML-RPC.pdf
 
Artigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraArtigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobra
 
Paralelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto EscalarParalelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto Escalar
 
Apostila ajax
Apostila ajaxApostila ajax
Apostila ajax
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.js
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Framework struts2v2.5
Framework struts2v2.5Framework struts2v2.5
Framework struts2v2.5
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetos
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptx
 

Mais de Pedro De Almeida

Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsPedro De Almeida
 
XSD Incomplete Overview Draft
XSD Incomplete Overview DraftXSD Incomplete Overview Draft
XSD Incomplete Overview DraftPedro De Almeida
 
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1Pedro De Almeida
 
Validation of a credit card number
Validation of a credit card numberValidation of a credit card number
Validation of a credit card numberPedro De Almeida
 
Sessão 10 Códigos Cíclicos
Sessão 10 Códigos CíclicosSessão 10 Códigos Cíclicos
Sessão 10 Códigos CíclicosPedro De Almeida
 
Sessao 9 Capacidade de canal e Introdução a Codificação de canal
Sessao 9 Capacidade de canal e Introdução a Codificação de canalSessao 9 Capacidade de canal e Introdução a Codificação de canal
Sessao 9 Capacidade de canal e Introdução a Codificação de canalPedro De Almeida
 
Sessão 8 Codificação Lempel-Ziv
Sessão 8 Codificação Lempel-ZivSessão 8 Codificação Lempel-Ziv
Sessão 8 Codificação Lempel-ZivPedro De Almeida
 
Sessao 7 Fontes com memória e codificação aritmética
Sessao 7 Fontes com memória e codificação aritméticaSessao 7 Fontes com memória e codificação aritmética
Sessao 7 Fontes com memória e codificação aritméticaPedro De Almeida
 
Sessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fonteSessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fontePedro De Almeida
 
Sessão 6 codificadores estatísticos
Sessão 6 codificadores estatísticosSessão 6 codificadores estatísticos
Sessão 6 codificadores estatísticosPedro De Almeida
 
Sessao 4 - Chaves espúrias e distância de unicidade
Sessao 4 - Chaves espúrias e distância de unicidadeSessao 4 - Chaves espúrias e distância de unicidade
Sessao 4 - Chaves espúrias e distância de unicidadePedro De Almeida
 
Sessao 3 Informação mútua e equívocos
Sessao 3 Informação mútua e equívocosSessao 3 Informação mútua e equívocos
Sessao 3 Informação mútua e equívocosPedro De Almeida
 
Sessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e EntropiasSessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e EntropiasPedro De Almeida
 
Cripto - Introdução, probabilidades e Conceito de Segurança
Cripto - Introdução, probabilidades e Conceito de SegurançaCripto - Introdução, probabilidades e Conceito de Segurança
Cripto - Introdução, probabilidades e Conceito de SegurançaPedro De Almeida
 
Avaliação económica de projectos
Avaliação económica de projectosAvaliação económica de projectos
Avaliação económica de projectosPedro De Almeida
 

Mais de Pedro De Almeida (20)

Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e Threads
 
IP Multicast Routing
IP Multicast RoutingIP Multicast Routing
IP Multicast Routing
 
XSD Incomplete Overview Draft
XSD Incomplete Overview DraftXSD Incomplete Overview Draft
XSD Incomplete Overview Draft
 
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
 
Validation of a credit card number
Validation of a credit card numberValidation of a credit card number
Validation of a credit card number
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Ficheiros em JAVA
Ficheiros em JAVAFicheiros em JAVA
Ficheiros em JAVA
 
Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Sessão 10 Códigos Cíclicos
Sessão 10 Códigos CíclicosSessão 10 Códigos Cíclicos
Sessão 10 Códigos Cíclicos
 
Sessao 9 Capacidade de canal e Introdução a Codificação de canal
Sessao 9 Capacidade de canal e Introdução a Codificação de canalSessao 9 Capacidade de canal e Introdução a Codificação de canal
Sessao 9 Capacidade de canal e Introdução a Codificação de canal
 
Sessão 8 Codificação Lempel-Ziv
Sessão 8 Codificação Lempel-ZivSessão 8 Codificação Lempel-Ziv
Sessão 8 Codificação Lempel-Ziv
 
Sessao 7 Fontes com memória e codificação aritmética
Sessao 7 Fontes com memória e codificação aritméticaSessao 7 Fontes com memória e codificação aritmética
Sessao 7 Fontes com memória e codificação aritmética
 
Sessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fonteSessao 5 Redundância e introdução à codificação de fonte
Sessao 5 Redundância e introdução à codificação de fonte
 
Sessão 6 codificadores estatísticos
Sessão 6 codificadores estatísticosSessão 6 codificadores estatísticos
Sessão 6 codificadores estatísticos
 
Sessao 4 - Chaves espúrias e distância de unicidade
Sessao 4 - Chaves espúrias e distância de unicidadeSessao 4 - Chaves espúrias e distância de unicidade
Sessao 4 - Chaves espúrias e distância de unicidade
 
Sessao 3 Informação mútua e equívocos
Sessao 3 Informação mútua e equívocosSessao 3 Informação mútua e equívocos
Sessao 3 Informação mútua e equívocos
 
Sessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e EntropiasSessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e Entropias
 
Cripto - Introdução, probabilidades e Conceito de Segurança
Cripto - Introdução, probabilidades e Conceito de SegurançaCripto - Introdução, probabilidades e Conceito de Segurança
Cripto - Introdução, probabilidades e Conceito de Segurança
 
Basic java tutorial
Basic java tutorialBasic java tutorial
Basic java tutorial
 
Avaliação económica de projectos
Avaliação económica de projectosAvaliação económica de projectos
Avaliação económica de projectos
 

Último

SLIDE DE Revolução Mexicana 1910 da disciplina cultura espanhola
SLIDE DE Revolução Mexicana 1910 da disciplina cultura espanholaSLIDE DE Revolução Mexicana 1910 da disciplina cultura espanhola
SLIDE DE Revolução Mexicana 1910 da disciplina cultura espanholacleanelima11
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxMauricioOliveira258223
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorEdvanirCosta
 
AULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobreAULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobremaryalouhannedelimao
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
BNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimentoBNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimentoGentil Eronides
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 

Último (20)

SLIDE DE Revolução Mexicana 1910 da disciplina cultura espanhola
SLIDE DE Revolução Mexicana 1910 da disciplina cultura espanholaSLIDE DE Revolução Mexicana 1910 da disciplina cultura espanhola
SLIDE DE Revolução Mexicana 1910 da disciplina cultura espanhola
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptx
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de Professor
 
AULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobreAULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobre
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
BNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimentoBNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimento
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 

Modelo APM em .NET para programação assíncrona

  • 1. Modelo APM em .NET por Pedro Gabriel O porquê da utilização/necessidade de uma abordagem assíncrona : Esta necessidade surge devido, principalmente à evolução das arquitecturas que passaram a ser multi-core em vez de single-core. Anteriormente, quando falávamos em aplicações “escaláveis”, qualquer aplicação single-thread era escalável num ambiente single-core, uma vez que todos os melhoramentos feitos aos processadores da época eram baseados numa melhor performance em single-core. Com o aparecimento de arquitecturas multi-core, qualquer aplicação single-thread deixou de ser escalável, pois não tira partido das funcionalidades das novas arquitecturas. Por suas vez, as linguagens de programação evoluiram de tal forma que praticamente todas as linguagens de alto nível suportam este tipo de abordagem, dando assim a possibilidade do programador criar aplicações multi-thread. Principais diferenças entre “modelos”: Normalmente, perante programas single-thread o fluxo de actividades pode ser descrito da seguinte forma: Estamos então, na presença de acções sequênciais, que mesmo sendo independentes ou não, só serão executadas consoante a ordém disposta. 1
  • 2. Modelo APM em .NET por Pedro Gabriel No que toca a um programa multi-thread, podemos descrever o fluxo de acções da seguinte forma: Por esta ordem de ideias, cada acção é executada por uma Thread diferente, deixando ao programador a gestão do fluxo do seu programa conforme o tempo que cada acção pode levar a ser completada. Com esta abordagem, está implicito um overhead que pode ser criado se uma aplicação tiver mais Threads do que processadores lógicos para uma determinada máquina. Tipicamente, estes custos podem ser descritos da seguinte forma: ● Custos Estáticos: Estão associados à memória utilizada para conter estruturas de dados relativas às Threads, e ao espaço de endereçamento alocado. Proporcional ao número de Threads. ● Custos Dinâmicos: Associados à actividade de scheduling. Quantas mais Threads estiverem em execução - READY - maior será a actividade de Scheduling. Proporcional ao número de Threads “Ready” para além do nº de cores. A este modelo está ainda adjacente a necessidade de implementar mecanismos de sincronização de Threads relativamente ao acesso a dados, por forma a manter os mesmos no estado correcto. 2
  • 3. Modelo APM em .NET por Pedro Gabriel Por último, resta demonstrar o fluxo de uma abordagem/modelo assíncrono. Neste modelo, as ações são executadas de forma intercalada, com a gestão realizada apenas por uma Thread. Uma das grandes vantagens deste modelo, é o facto de o programador poder dar “ordens” às ações a realizar. Do ponto de vista do segundo modelo (multi-thread), ações podem ser interrompidas consoante o “desejo” do Sistema Operativo. Neste último modelo é o programador quem pode dar ordem de interrupção, mantendo assim o controlo sobre as ações. 3
  • 4. Modelo APM em .NET por Pedro Gabriel Após a descrição da motivação para o uso de programação assíncrona e uma breve descrição dos modelos mais utilizados, vejamos agora um modelo concreto que foi o principal padrão utilizado pela framework .NET antes da versão 4.5. Este documento mostra ainda os três tipos de rendezvous que integram o APM: Wait-Until Done, Polling, Callback. Asynchronous Programming Model (APM): Este padrão permite-nos executar várias ações em diferentes Threads. Várias classes da framework .NET suportam este padrão através do fornecimento de métodos que seguem a cnvenção BeginXXX e EndXXX. Para demonstrar este mesmo padrão, iremos utilizada o método Read da classe Stream. Primeiro, vejamos a versão sincrona: public int Read (byte[] buffer, int offset, int size); De seguida, a versão que suporta APM: public IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback callback, object state); public int EndRead (IAsyncResult asyncResult); Outra particularidade é o tipo de retorno que está envolvido nestes métodos da versão APM. O método que inicia a operação (Begin) devolve um objecto do tipo IAsyncResult que, basicamente, é um token que representa a operação. Existe também um callback, que é basicamente uma função que será executada mediante certas condições. Neste caso concreto, este callback só é executado quando a operação assíncrona termina ou quando ocorre um erro na sua realização. A definição do callback é dada pelo seguinte delegate: public delegate void AsyncCallback (IAsyncResult ar); Quem tratar deste callback/delegate invoca o método que devolve o resultado final da operação assíncrona (End). É também responsável por re-lançar um erro caso este ocorra. 4
  • 5. Modelo APM em .NET por Pedro Gabriel Vejamos então código-fonte que demonstra este padrão: É de notar então, que na construcção do objecto do tipo FileStream é necessária a indicação da intenção futura de realizar uma leitura assíncrona. De modo a realizar a leitura deste mesmo modo, são invocados os métodos que suportam a versão APM, BeginRead e EndRead. O primeiro recebe todos os argumentos que o método Read recebe, e mais dois que efectuam o suporte ao modelo APM - Callback e Object-State. Note-se ainda o retorno de uma objecto IAsyncResult que é posteriormente passado ao método End para obter o resultado final. 5
  • 6. Modelo APM em .NET por Pedro Gabriel Rendezvous 1 - Wait-Until Done: Este tipo de rendezvous permite iniciar uma acção assíncrona, realizar outro trabalho, e posteriormente voltar para verificar se a acção foi completada entretanto. A verificação irá bloquear até que a acção seja completada. Percebemos então que, qualquer código que seja colocado entre as chamas dos métodos APM será executado enquanto o mesmo pedaço de código lê o ficheiro de texto. É uma abordagem possivel para aplicações que pretendam ter um grau de resposta alto perante um elevado número de acções a realizar. 6
  • 7. Modelo APM em .NET por Pedro Gabriel Rendezvous 2 - Polling : Este tipo de rendezvous envolve a Thread que pretende ser notificada directamente, ou seja, é esta que tem de verificar, ao longo de um periodo, a realização da acção assíncrona que iniciou. Tem a vantagem de não bloquear enquanto realiza as verificações. A verificação é feita através da chamada da propriedade de IsComplete do resultado devolvido pelo método BeginXXX. Código acima demonstra que, é possivel realizar outro trabalho, à medida que se verifica a realização da acção inicial, sem que esta bloqueie a Thread envolvida. 7
  • 8. Modelo APM em .NET por Pedro Gabriel Rendezvous 3 - Callback : Este último rendezvous obriga à passagem de um método callback que será executado quando a acção assíncrona terminar ou se gerar erro. É desta forma que ficamos a saber que a acção terminou. Por esta lógica, é dentro do callback que iremos obter o resultado final da nossa acçao assíncrona, através do método EndXX. Na prática, o que o método BeginXX está a fazer é colocar a acção assíncrona numa fila de acções (queue), que através de Threads mantidas pela ThreadPool internal do .NET, será realizada mais tarde. A forma que a framework tem de avisar a Thread que iniciou a acção é invocar o callback fornecido pela Thread inicial. Se o callback for: Então a chamada será feita da seguinte forma: fs.BeginRead(s_data, 0, s_data.Length, ReadIsDone, fs); Como podemos ver, a obtenção do resultado é feita dentro do callback. O mesmo resultado é tratado lá dentro, uma vez que não é permitido qualquer retorno. Relembro que a assinatura do método tem que satisfazer o delegate demonstrado anteriormente. 8