2015-07-17 6 views
22

Scala'da, scala.concurrent.ExecutionContext.Implicits.global'u içe aktararak kendi tanımlamanız gerekmiyorsa, global bir ExecutionContext kullanabilirsiniz.Scala neden varsayılan ExecutionContext belgesini geri yüklemek için bir ForkJoinPool kullanıyor?

Sorumu ThreadPoolExecutor yerine bu yürütme için ForkJoinPool neden seçildi.

Anlayışım, çatal-birleştirme çerçevesinin, problemleri yinelemeli olarak çözmede mükemmel olmasıdır. Bir görevi yarıya bölen kod yazmanız gerekiyor, böylece yarısı iplikten geçirilebilir ve diğer yarısı başka bir iş parçacığı tarafından çalıştırılabilir. Bu, çok özel bir programlama modeli gibi görünüyor ve genel olarak çeşitli asenkron uygulamaların çok çeşitli olası uygulamalarda yürütülmesine genel olarak uygulanabilecek bir uygulama değil.

Neden çoğu insanın kullanacağı varsayılan yürütme bağlamı için neden ForkJoinPool seçildi? Çatal çalma paradigmasını kullanmasanız bile, çalınan tasarım, performansın artmasına neden olur mu?

+0

http://stackoverflow.com/a/7927009/1591139 – ka4eli

cevap

4

Ben scala tasarımcılar için konuşamıyor ama scala, o dilin kullanımı Future ler genellikle çok küçük, kısa ömürlü görevlerin bir sürü oluşturulmasını içerir ve bu yüzden işle (örn her map çağrı yeni bir görev oluşturur) çalma tasarımı uygun.

Eğer kesin ayrıntılar bu tür önem veriyorsanız kullanmayı tercih olabilir, her map adım için ekstra görevler yaratmaktan kaçınmak için trambolin kullanır ve açık infaz bağlamları (ve bir ThreadPoolExecutor için AIUI varsayılan) yapar scalaz-eşzamanlı en Future.

İlgili konular