SlideShare uma empresa Scribd logo
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

PDF
Java memory model primary ref. - faq
PPTX
As Novidades do CSharp 5.0
PPT
Resumo OpenMP
PDF
Java Memory Model (2005)
PPTX
PDF
Refactoring to patterns
PDF
Zephir
PPS
Barbeiro Sonolento
Java memory model primary ref. - faq
As Novidades do CSharp 5.0
Resumo OpenMP
Java Memory Model (2005)
Refactoring to patterns
Zephir
Barbeiro Sonolento

Mais procurados (17)

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

Semelhante a APM Model in .NET - PT-pt (20)

DOCX
Multithreaded tecnologia
PDF
Tutorial passo a passo sobre RMI
PPT
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
PDF
Palestra - Symfony Framework MVC PHP 5
PDF
Tópicos - Computacao Paralela Programação (Visão geral)
PDF
Sap – stablility and abstract principle
PDF
XML-RPC.pdf
PDF
Artigo distribuidos programação java com rmi e cobra
PDF
Paralelização de Algoritmo do Produto Escalar
PDF
Apostila ajax
PPTX
Módulo 5 Arquitetura de Computadores
PDF
Introdução ao Node.js
PDF
Aula sobre multithreading
PDF
Framework struts2v2.5
PDF
40 php orientado a objetos
PDF
Apostila php orientado a objetos
PDF
40 php orientado a objetos
PDF
php orientado_a_objetos
PPTX
Aula 8 - Modularização e Funções.pptx
Multithreaded tecnologia
Tutorial passo a passo sobre RMI
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Palestra - Symfony Framework MVC PHP 5
Tópicos - Computacao Paralela Programação (Visão geral)
Sap – stablility and abstract principle
XML-RPC.pdf
Artigo distribuidos programação java com rmi e cobra
Paralelização de Algoritmo do Produto Escalar
Apostila ajax
Módulo 5 Arquitetura de Computadores
Introdução ao Node.js
Aula sobre multithreading
Framework struts2v2.5
40 php orientado a objetos
Apostila php orientado a objetos
40 php orientado a objetos
php orientado_a_objetos
Aula 8 - Modularização e Funções.pptx
Anúncio

Mais de Pedro De Almeida (20)

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

Último (20)

PPTX
2. A Cultura do Salão - o fim das trevas.pptx
PPTX
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
PPTX
1. A Cultura do Palco - muitos palcos, um espetáculo.pptx
PDF
HORÁRIO GERAL SIGAA 2025_PRÉVIA_SIGAA-1.pdf
PPTX
Aula 01 introdução a Psicologia Escolar.pptx
PPSX
4. A Cultura da Catedral - HistóriaCArtes .ppsx
PPT
Aula de Sociologia 22022022154507AULA 2.ppt
PPTX
SEGURANÇA, MEIO AMBIENTE E SAÚDE Aula 1.pptx
PDF
01-slide-especialidade-mensageira-de-deus.pdf
PPTX
BIÓTICOS E ABIOTICOS CADEIA ALIMENTAR.pptx
PDF
E-BOOK-Inovacao-em-Ciencia-e-Tecnologia-de-Alimentos.pdf
PPTX
matriaesuastransformaes-1ano-230402203238-f3b10049.pptx
PDF
HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES...
PPTX
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
PDF
DESCCARTE DE MATERIAIS BIOLOGICO ESTUDO DA ODONTOLOGIA
PDF
Urbanização no Brasil LEVANDO EM CONTA CONCEITOS
PPTX
4. A cultura do cinema e as vanguardas.pptx
PDF
[Slides] A Literatura no ENEM 2017 (1).pdf
DOC
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
PPTX
REVISA-GOIAS-6o-ANO-LP-3o-BIMESTRE-PPT.pptx
2. A Cultura do Salão - o fim das trevas.pptx
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
1. A Cultura do Palco - muitos palcos, um espetáculo.pptx
HORÁRIO GERAL SIGAA 2025_PRÉVIA_SIGAA-1.pdf
Aula 01 introdução a Psicologia Escolar.pptx
4. A Cultura da Catedral - HistóriaCArtes .ppsx
Aula de Sociologia 22022022154507AULA 2.ppt
SEGURANÇA, MEIO AMBIENTE E SAÚDE Aula 1.pptx
01-slide-especialidade-mensageira-de-deus.pdf
BIÓTICOS E ABIOTICOS CADEIA ALIMENTAR.pptx
E-BOOK-Inovacao-em-Ciencia-e-Tecnologia-de-Alimentos.pdf
matriaesuastransformaes-1ano-230402203238-f3b10049.pptx
HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES...
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
DESCCARTE DE MATERIAIS BIOLOGICO ESTUDO DA ODONTOLOGIA
Urbanização no Brasil LEVANDO EM CONTA CONCEITOS
4. A cultura do cinema e as vanguardas.pptx
[Slides] A Literatura no ENEM 2017 (1).pdf
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
REVISA-GOIAS-6o-ANO-LP-3o-BIMESTRE-PPT.pptx

APM Model in .NET - PT-pt

  • 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