Upload
charles-fortes
View
445
Download
3
Embed Size (px)
DESCRIPTION
Apresentação utilizada no InfoTech2012 - Demonstra como funcionam as threads e como utilizar os recursos do .NET 4.0 para tirar o melhor proveito deste recurso e criar aplicativos mais rápidos com melhor experiência de usuário
Citation preview
THE POWER OF THREADS
Charles Fortes | Rogério Ohashi17 de Maio de 2012
@CharlesFortes@ohashidotnet
Avaliação da Palestra
http://tinyurl.com/infotechdia17
@CharlesFortes
RÁPIDA E BÁSICA INTRODUÇÃO AO CONCEITO DE THREADS
Basicamente é processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente
1
2
1
3
1
2
1
Tempo
O suporte a threads é fornecido pelo Sistema Operacional
O sistema operacional enfilera os processos e os executa conforme sua prioridade
O kernel controla a fila de processamento executando um pouco de cada processo,
Quando o computador possui apenas um núcleo,
ele alterna tão rapidamente que da a impressão de estar sendo executado ao mesmo
tempo.
3
2
1 Running
Sleeping
Sleeping
Single Core
3
2
1
Running
Sleeping
Sleeping
Single Core
21
3
Running
Sleeping
Runing
Dual Core
13
2
Running
Sleeping
Runing
Dual Core
Isto permite você navegar na Web enquanto ouve música
Quando trabalhamos com paralelismo a nível de aplicativo,
nós damos o nome de threads
1
2
1
3
1
2
1
Tempo
Cada thread tem o mesmo contexto de software e compartilha o mesmo espaço de memória (endereçado a um mesmo processo-pai)
Sendo assim o overhead causado pelo escalonamento de uma thread é muito menor
do que o escalonamento de processos.
"quando uma thread está à espera de determinado dispositivo
de entrada/saída ou qualquer outro recurso do sistema, o processo como um todo não fica parado, pois quando uma
thread entra no estado de 'bloqueio', uma outra thread aguarda na fila de prontos para executar."
Uma thread pode assumir os seguintes estados:
•Unstarted: logo após ser criada (antes do Start());
•Running: após ser ativada (Start()) ou após método Resume();
•Suspended: após método Suspended();
•Stopped: após método Abort().
As principais principais beneficios que podemos tirar de um sistema que usa MultiThreads são....
processamento de dados paralelos para economia de tempo
manter a aplicação "destravada" enquanto processa
Programando paralelismo no .NET
Task Parallel Library
PLINQ
Data Structures for Parallel Programming
Data Structures for Parallel Programming
A versão. NET Framework 4 introduz vários novos tipos que são úteis em programação paralela, incluindo um conjunto de classes para tratar coleções de classes concorrentes, e controles de sincronização, além de Lazy Load para classes.
Data Structures for Parallel Programming
Você pode usar esses tipos com qualquer código de aplicativo de vários segmentos, incluindo a biblioteca paralela de tarefas e PLINQ.
Data Structures for Parallel Programming
O namespace System.Collections.Concurrent fornece uma forma de adicionar e remover itens de uma lista sem se preocupar com a concorrencia de acesso a lista e sem a necessidade de se construir seu próprio controle de locks
Data Structures for Parallel Programming
Os mecanismos de LazyLoad para classes, permite que o .NET apenas aloque o objeto
na memória no momento em que for necessário sua utilização, o que pode
melhorar o desempenho significativamente
Task Parallel Library
É um conjunto de APIs e Typos disponiveis nos namespaces System.Threading e System.Threading.Tasks
Seu objetivo é facilitar e agilizar o processo de desenvolvimento de funções paralelas
Task Parallel Library
Com ela conseguimos controlar a execução das tarefas paralelas, Agendar a execução das tarefas pelo ThreadPool, funções de cancelamento, gerenciamento de estados e outros
Seu objetivo é facilitar e agilizar o processo de desenvolvimento de funções paralelas
Task Parallel Library
Apenas deve-se tomar cuidado pois o custo de criar e gerir threads, para operações de loop por exemplo, onde o trabalho é muito pequeno, pode ser muito mais lento do que usar o for em sí.
Task Parallel Library
Criar o paralelismo de Tarefas é muito fácil. Você pode optar por disparar vários métodos em paralelo com o Parallel.Invoke, ou criar uma task explicitamente.
Task Parallel Library
Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());
// Create a task and supply a user delegate by using a lambda expression. var taskA = new Task(() => Console.WriteLine("Hello from taskA."));
// Start the task. taskA.Start();
// Output a message from the joining thread. Console.WriteLine("Hello from the calling thread."); /* Output: * Hello from the joining thread. * Hello from taskA. */
Task Parallel Library
Da mesma forma, manipular loops fica muito fácil
Task Parallel Library
// Sequential version foreach (var item in sourceCollection){ Process(item);}
// Parallel equivalentParallel.ForEach(sourceCollection, item => Process(item));
PLINQ
O PLINQ é uma extensão do LINQ introduzido no .NET 3.0, fornecendo métodos de paralelismo para iteração com coleções
PLINQ
var nums = Enumerable.Range(10, 10000);
var query = from num in nums.AsParallel() where num % 10 == 0 select num;
DEMOS
PERGUNTAS?