Paralelismo ordenado

Há algum tempo atrás implementei Parallel Programming em um WCF onde trabalho, a medida que as chamadas vão chegando eu vou executando usando Factory.StartNew(() => Execute(commandToExecute)), porém eu necessito que as chamadas sejam executadas em ordem em que elas chegam, o que não acontece geralmente quando se usa Parallel Programming, isso decorre pelo fato da criação de várias threads que são utilizadas para controlar as execuções. O que fazer? Desistir? Não, depois de muito pesquisar descobri que no construtor do Factory você pode passar um Scheduler como parâmetro que serve para configurar alguns comportamentos nas execuções da Tasks, um deles é a MaxDegreeOfParallelism que limita a quantidade de operações concorrentes que executam em paralelo. O que devemos fazer é somente criar uma classe que herda da TaskScheduler como essa que se encontra no link:
http://msdn.microsoft.com/en-us/library/ee789351.aspx e setar o MaxDegreeOfParallelism para um. Você pode pensar que ao setar para um estou acabando com o paralelismo que é o desejado, mas não, o paralelismo que você acaba matando é o de controle das chamadas, tendo apenas uma thread para controle, as chamadas passam a ser executadas ordenadamente e para a execução do processo em si, irá continuar utilizando o máximo de cores do processador do seu server.

Cheers

Anúncios

2 comentários sobre “Paralelismo ordenado

  1. Quando você vai fazendo o call usando Factory.StartNew, ele vai criando algumas threads que controlam a execução dos processos, Exemplo: Eu faço o Call de um processo A, B e C, então são criados 3 threads(um exemplo somente) uma para cada processo que executam simultâneamente, pode acontecer de o processo B acabar antes do A e o C antes do B. Mas o meu sistema requer que o processo B só pode ser executado ao acabar o A, e o C ao término do B. Quando você deixa apenas uma thread para fazer esse controle, sempre os processos vão ser executados ordenadamente mas para a execução do processo o paralelismo ainda existe. Entendeu? E olha que quem era ruim de explicar era você, hahahahaha,

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s