Threads - .Net Framework 4.0

Post on 11-Jun-2015

447 views 3 download

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

Transcript of Threads - .Net Framework 4.0

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?