2012-10-08 19 views
7

Endüstri pratiği açısından en iyi ne anlama geldiğini bilmek çok yönlü bir yaklaşım kullanarak bir dosyada okumaktır. Java'da ben şu tür bir şey yapacağını:java vs scala - ayrı bir iş parçacığı içinde okuma okuma

class Reader { Result readFile(File file, Listener callback) } 
class Listener { void process(Result r) } 

Okuyucu bir sonuç üretmek ve daha sonra çalışma iplik withing Listener geri çağırmak için başka bir iş parçacığı spawn olur. Bu iyi bir yaklaşım mı? Bu, bunu başarmak için muhtemelen başka, daha iyi mekanizmalara sahip olan Scala'ya nasıl dönüşür?

+0

Bir dosya mı yoksa birçok dosya mı okumaya çalıştığınız belli değil (bana göre). Çok fazla dosya varsa, o zaman Kim Stebel'in cevabı daha iyidir. Farklı iş parçacıklarında işlenen sonuçlara ihtiyaç duyan tek bir dosyaysa, diğer yanıt daha iyi görünür. –

+0

Ne demek "daha iyi"? Daha kısa kod? Muhtemelen evet. Daha fazla performans? Muhtemelen Scala sahnelerin arkasında çok fazla kod oluşturduğundan değil. –

+0

dosyadaki her satırın aynı anda işlenmesini istiyorsa, bunu paralel koleksiyonlarla yapabilir. –

cevap

7

Scala'da bir yaklaşım, paralel koleksiyonları kullanmak olacaktır. Sen files.par kullanarak paralel bir koleksiyon haline getirmek ve sonra işlem yapmak için haritayı kullanabilirsiniz

files:Seq[File] = ... 

: Eğer dosyaların bir diziyi olduğunu varsayalım. Harita, eşzamanlı olarak dizinin bölümlerini işlemek için bir iç havuz kullanacaktır. Ne tür iplik havuzu kullanılıyor configured olabilir.

files.par.map(readFile).foreach(process) 
1

Bu, alternatif bir yaklaşım istiyorsanız Akka için iyi bir kullanım örneği gibi görünüyor.

+0

Akka sadece bir aktör çerçevedir ve afaik Java'dan kullanılabilir. Ayrıca java için birçok aktör framworks de var. –