2016-03-07 15 views
5

: Ben anlıyorumAkka Future - Paralel ve Eşzamanlı mı? <a href="http://www.artima.com/shop/akka_concurrency" rel="noreferrer">Akka Concurrency</a> iyi yazılmış itibaren

enter image description here

gibi, diyagram aynı iş parçacığı üzerinde çalışacak, numSummer ve charConcat hem işaret ediyor.

Her Future'u paralel olarak, yani ayrı iş parçacıklarında çalıştırmak mümkün mü?

+2

Muhtemelen, figür çağrılmalıdır "Flatma:

val numSummer = Future { ... } // execution kicked off val charConcat = Future { ... } // execution kicked off numSummer.flatMap { numsum => charConcat.map { string => (numsum, string) } } 

ve hakkı için Birbirine eşzamanlı olarak çarpma ", soldakiin eşzamanlı olduğu göz önüne alındığında .... – mdm

+0

Fakat" eşzamanlı "aynı parçayı tekrar kullanmak anlamına gelir, hayır? –

+0

Mutlaka, anladığım kadarıyla değil. http://stackoverflow.com/questions/1897993/difference-between-concurrent-programming-and-parallel-programming veya https://blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming; yürütmeler arasında çakışma olmadığında sıralı olur. – mdm

cevap

11

soldaki resim, paralel olarak çalışan şeklindedir.

Resimdeki nokta, Future.apply yönteminin çalıştırmayı başlatmasıdır. Bu nedenle, ilk gelenin sonucu flatMap ed (sağdaki resimde olduğu gibi) olduğu sürece olmazsa Paralel yürütmeyi yap.

(. o parallelizes Nasıl farklı bir sorudur "başladı" tarafından, i iş hakkında anlatılıyor ilgili ExecutionContext demek unutmayın ve iş parçacığı havuzu boyutu gibi etkenlere bağlı olabilir.)

Eşdeğer sol için kod:

Future { ... } // execution kicked off 
    .flatMap { numsum => 
    Future { ... } // execution kicked off (Note that this does not happen until 
        // the first future's result (`numsum`) is available.) 
     .map { string => 
     (numsum, string) 
     } 
    }