39
THE POWER OF THREADS Charles Fortes | Rogério Ohashi 17 de Maio de 2012 @CharlesFortes @ohashidotnet

Threads - .Net Framework 4.0

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

Page 1: Threads - .Net Framework 4.0

THE POWER OF THREADS

Charles Fortes | Rogério Ohashi17 de Maio de 2012

@CharlesFortes@ohashidotnet

Page 2: Threads - .Net Framework 4.0

Avaliação da Palestra

http://tinyurl.com/infotechdia17

@CharlesFortes

Page 3: Threads - .Net Framework 4.0

RÁPIDA E BÁSICA INTRODUÇÃO AO CONCEITO DE THREADS

Page 4: Threads - .Net Framework 4.0

Basicamente é processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente

Page 5: Threads - .Net Framework 4.0

1

2

1

3

1

2

1

Tempo

Page 6: Threads - .Net Framework 4.0

O suporte a threads é fornecido pelo Sistema Operacional

Page 7: Threads - .Net Framework 4.0

O sistema operacional enfilera os processos e os executa conforme sua prioridade

Page 8: Threads - .Net Framework 4.0

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.

Page 9: Threads - .Net Framework 4.0

3

2

1 Running

Sleeping

Sleeping

Single Core

Page 10: Threads - .Net Framework 4.0

3

2

1

Running

Sleeping

Sleeping

Single Core

Page 11: Threads - .Net Framework 4.0

21

3

Running

Sleeping

Runing

Dual Core

Page 12: Threads - .Net Framework 4.0

13

2

Running

Sleeping

Runing

Dual Core

Page 13: Threads - .Net Framework 4.0

Isto permite você navegar na Web enquanto ouve música

Page 14: Threads - .Net Framework 4.0

Quando trabalhamos com paralelismo a nível de aplicativo,

nós damos o nome de threads

Page 15: Threads - .Net Framework 4.0

1

2

1

3

1

2

1

Tempo

Page 16: Threads - .Net Framework 4.0

Cada thread tem o mesmo contexto de software e compartilha o mesmo espaço de memória (endereçado a um mesmo processo-pai)

Page 17: Threads - .Net Framework 4.0

Sendo assim o overhead causado pelo escalonamento de uma thread é muito menor

do que o escalonamento de processos.

Page 18: Threads - .Net Framework 4.0

"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."

Page 19: Threads - .Net Framework 4.0

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().

Page 20: Threads - .Net Framework 4.0

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

Page 21: Threads - .Net Framework 4.0

Programando paralelismo no .NET

Page 22: Threads - .Net Framework 4.0
Page 23: Threads - .Net Framework 4.0

Task Parallel Library

PLINQ

Data Structures for Parallel Programming

Page 24: Threads - .Net Framework 4.0

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.

Page 25: Threads - .Net Framework 4.0

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.

Page 26: Threads - .Net Framework 4.0

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

Page 27: Threads - .Net Framework 4.0

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

Page 28: Threads - .Net Framework 4.0

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

Page 29: Threads - .Net Framework 4.0

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

Page 30: Threads - .Net Framework 4.0

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í.

Page 31: Threads - .Net Framework 4.0

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.

Page 32: Threads - .Net Framework 4.0

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. */

Page 33: Threads - .Net Framework 4.0

Task Parallel Library

Da mesma forma, manipular loops fica muito fácil

Page 34: Threads - .Net Framework 4.0

Task Parallel Library

// Sequential version foreach (var item in sourceCollection){ Process(item);}

// Parallel equivalentParallel.ForEach(sourceCollection, item => Process(item));

Page 35: Threads - .Net Framework 4.0

PLINQ

O PLINQ é uma extensão do LINQ introduzido no .NET 3.0, fornecendo métodos de paralelismo para iteração com coleções

Page 36: Threads - .Net Framework 4.0

PLINQ

var nums = Enumerable.Range(10, 10000);

var query = from num in nums.AsParallel() where num % 10 == 0 select num;

Page 37: Threads - .Net Framework 4.0

DEMOS

Page 38: Threads - .Net Framework 4.0

PERGUNTAS?

Page 39: Threads - .Net Framework 4.0