Pular para o conteúdo principal

Coleções paralelas em Scala

Amanhã, quarta-feira, 28 de Março, teremos mais um mini-curso gratuito de Scala na globalcode em SP (e webcast). Para dar um gostinho, vou traduzir aqui mais um dos posts de scala que fiz no meu blog pessoal, jcranky.com, em inglês.

Há mais ou menos um mês atrás, eu escrevi aqui sobre instruções import em scala. Dessa vez, vou falar um pouco sobre as coleções paralelas, um recurso muito interessante que scala trouxe a partir da versão 2.9, que permite que transformemos coleções normais em coleções que serão executadas em paralelo. Divirtam-se!

---
As Coleções Paralelas de Scala são úteis até nos casos mais simples
Um dos principais recursos que a versão 2.9 de Scala traz são as Coleções Paralelas. Se fosse pensar nelas rapidamente, vocêe pode considerar usar tal recurso apenas em cenários complexos e com processamento intenso.
Embora esses sejam certamente os casos principais onde você poderia considerar o uso de coleções paralelas, existem formas mais simples de alavancar este recurso. O código necessário para usá-lo é tão simples que é fácil pensar em razões para fazer isso em qualquer lugar:
1myCol.par foreach(println)
Como isso poderia ser mais simples??
Então onde eu usei isso de verdade, você pode perguntar. A empresa para a qual trabalho armazena arquivos na Amazon S3. Antes disso, os arquivos eram armazenados no disco local. Então, quando nós migramos para o S3, eu escrevi um script em Scala para fazer o upload de todos os arquivos… milhares deles. Minha primeira solução se parecia com isso:
1listOfFiles foreach(file => sendToS3(file))
E então de repente eu percebi que é ridiculamente simples paralelizar o upload dos arquivos:
1listOfFiles.par foreach(file => sendToS3(file))
Resultado: metade do tempo para fazer o upload dos arquivos, tendo feito praticamente nada. Muito legal, não?
---

Para quem quiser, a versão original em inglês pode ser encontrada aqui.

[]s,
Paulo "JCranky" Siqueira
http://jcranky.com
http://github.com/jcranky
http://www.twitter.com/jcranky

Comentários

Yara Senger disse…
Muito legal o post! Espero que tenhamos cada vez mais Scala na Globalcode!

[]s
Yara
Yara Senger disse…
Este comentário foi removido pelo autor.

Postagens mais visitadas deste blog

10 reasons why we love JSF

1. One-slide technology: it's so simple that I can explain basic JSF with one slide. 2. Easy to extend: components, listeners, render kit, Events, Controller, etc. 3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ... 4. Architecture model: you can choose between more than 100 different architecture. 5. Open-mind community: using JSF you are going to meet very interesting people. 6. We are using JSF the last 5 years and we found very good market for JSF in Brazil 7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard! 8. Many professionals now available 9. It's a standard. It's JCP. Before complain, report and help! 10. Ed Burns, spec leader, is an old Globalcode community friend! EXTRA: My wife is specialist in JSF. She's my F1 for JSF :) Nice job JSF community! -Vinicius Senger

Devo fazer um curso ou ler um livro?

Acredito que todos os instrutores ou professores, independentemente da área, escola ou centro de treinamento, já devam ter recebido essa pergunta alguma vez na vida: devo fazer um curso ou ler um livro? Para responder a essa pergunta, precisamos avaliar os prós e contras de cada opção. Trabalho com treinamento há algum tempo e, hoje, recebi essa pergunta de um aluno. Não adianta responder a ou b sem argumentar, demonstrando as opções conforme a situação do aluno. O conteúdo, a forma de transmissão e a capacidade de assimilação do indivíduo são chaves para haver benefício maior de aprendizado. Tanto em um bom curso quanto em um bom livro, o conteúdo é a premissa básica . Por conteúdo entendemos: se está organizado; se respeita pré-requisitos; se promove o aprendizado guiado e incremental; se aborda de forma satisfatória os principais pontos; se tem bom balanço entre teoria, exemplos e prática (favorecendo exemplos e prática); se tem como premissa a acessibilidade possível (e cabível) pa...

JSF 2 - Composite Components, você não precisa mais ser um ninja

Estamos em uma nova era da computação, os dados não estão mais localizados em um banco dentro de sua empresa, vivemos a explosão de redes sociais, informações são geradas a todo instante, e se torna essencial que sua aplicação conheça os serviços disponíveis na web e consumam suas APIs geralmente disponíveis por serviços REST. Legal, mas como ficam meus aplicativos Java EE neste novo cenário? Para quem vem acompanhando a evolução da plataforma, é notório que todo esforço vem sendo utilizado para aumentar a produtividade e a integração com novos serviços. Basicamente duas especificações surgem com muita força para atender este cenário, a JSR - 314 (JSF-2) e JSR - 311 (JAX-RS), neste post exploraremos a JSR-314 (JSF2) e sua nova forma de criar Composite Components. Uma das grandes queixas dos desenvolvedores JSF era a complexidade em criar composite components, era necessário um vasto conhecimento sobre o ciclo de vida de uma aplicação JSF. Agora, você não precisa ser mais um “ninja” em ...

Exemplo de CRUD para o AppEngine(Struts 2 + Google Guice + JPA)

E dando continuidade a série "Who wants to be a milionaire"... Ok, então você já teve a sua idéia milionária, já deu uma lida no Google AppEngine(GAE) depois do meu último post mas agora tá faltando aquele 'empurrãozinho' para iniciar seu projeto. Tudo bem, aqui vai um empurrão ladeira abaixo... Vou detalhar neste post uma aplicação completa(CRUD) utilizando alguns frameworks Java(Struts 2, Google Guice, JPA) sendo hospedada no Google AppEngine(GAE). Não vou entrar em detalhes específico de cada um dos frameworks pois precisaria de algumas dezenas de posts para isso, o intuito é somente a adaptação necessária para ser executada no GAE, e alguns comentários sobre a arquitetura do projeto. > Struts 2 Infelizmente não é plug-and-play neste ambiente, porém para utilizar o Struts 2 no ambiente do GAE, as modificações são bem simples. A primeira delas é em relação ao framework Ognl que para execução de Reflection acaba esbarrando em algumas problemas de segurança. Para...

Sun, Oracle, JavaOne e mais algumas páginas desta longa história...

Desde abril de 2009 estamos acompanhando todo o processo de aquisição da Sun pela Oracle, que aconteceu muito perto da crise, e no ambiente de negativismo da crise. Parte da comunidade, principalmente os mais velhos tinham um relacionamento de admiração à Sun e e aos engenheiros da Sun. E tantas carreiras e mesmo famílias sendo sustentadas pelo capital gerado ao redor da tecnologia Java. É natural sentir um pouco de medo do impacto deste negócio milionário: O que a Oracle vai fazer com o Java? Vai continuar OpenSource ? Vão mudar a política de distribuição da JVM ? E o JCP está seguro ? Haverá impacto negativo para o Java ? E para as outras ferramentas e tecnologias da Sun ? Com esta enorme mudança de poder dentro da comunidade Java como as outras empresas irão reagir ? Foi realizado hoje um WebCast gratuito "Sun Oracle Strategy", com quatro horas de duração, bastante marketing, muitos adjetivos, resolvi resumir os fatos mais importantes para a nossa comunidade nos com um...

Hackeando o Prezi com Robot, Socket e Android

O Prezi é uma ferramenta online para construção de apresentação multimídia semelhante ao famoso Power Point, porém, através de templates prontos e animações bem trabalhadas, o Prezi consegue dar uma dinâmica e uma qualidade visual muito maior. Mas mesmo com toda esta propaganda inicial me sentia desconfortável com uma situação do Prezi: necessitaria estar perto do computador ou do notebook para ficar trocando os slides, quer dizer, dando mais um passo na animação construída na ferramenta. Isso pesa muito quando temos um descendente de italiano (meu caso) que fala muito com as mãos e não consegue ficar parado durante a palestra. Desta forma decidi “hackear” o Prezi. Vale dizer que este termo é confundido com o termo “Crakear”, que, neste caso, quer dizer pessoas que invadem ou roubam dados digitais com objetivo de destruir sistemas ou de obter lucro de forma ilícita. O Hacker é o “nerd do bem”!. Inicialmente tentei mudar o aplicativo que podemos baixar do Prezi e passar...