어제 스터디 그룹과 공유 한 코드는 다음과 같습니다. https://gist.github.com/natemurthy/019e49e6f5f0d1be8719.스칼라 컬렉션에 산술 연산을 매핑하고 결과를 합산합니다.
$ scala -J"-Xmx4G" map
을 4 개 별도의 테스트를 위해 다음과 같은 결과를 얻을 : 컴파일 후, 나는 다음과 같은 힙 PARAMS와 map.scala을 실행
// (1L to 20000000L).map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 7.562381
// (1L to 20000000L).toArray.map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 1.233997
// (1L to 20000000L).toVector.map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 15.041896
// (1L to 20000000L).par.map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 18.586220
나는이 결과에서 차이가 이유를 알아 내려고 노력하고있어를 다른 콜렉션 유형, 더 중요한 것은, 직관적으로 더 빨리 평가되어야하는 콜렉션의 경우 성능이 왜 나쁜 것처럼 보이는 이유입니다. 이러한 결과에 대한 귀하의 통찰력을 듣고 싶습니다. 나는 또한 Breeze과 Saddle (동일한 테스트에서 더 나은 성능을 보임)에서 이러한 작업을 수행하는 방법을 실험했지만 내장 된 Scala Collections API를 얼마나 멀리 밀어 낼 수 있는지보고 싶습니다.
이 테스트는 Asus Zenbook UX31A, Intel Core i7 3517U 1.9GHz 듀얼 코어/하이퍼 스레딩, 4GB RAM, Ubuntu 12.04 Desktop에서 실행되었습니다. JDK와 스칼라 2.11.1을 사용하여 1.7
좋은 답변이 주어졌습니다. 예, 문제는 실제 작업 외에 다양한 유형으로 * 변환 *을 벤치마킹한다는 것입니다. 실제 성능을 알아 내려면 작업을 변환과 분리하십시오. – samthebest