Clojure의 지연 시퀀스 대 변환기 벤치마크
6029 단어 benchmarkclojuretransducer
I/O 요소를 추가하기 위해 아래 프로그램을 사용하여 "fake.txt"라는 데이터 파일을 준비했습니다.
(with-open [w (io/writer "fake.txt")]
(doseq [n (range 10000000)]
(.write w (str n "\n"))))
F1은 지연 시퀀스 기반 버전입니다. "fake.txt"에서 데이터를 읽고 몇 단계의 계산을 수행합니다.
(defn f1
[]
(with-open [r (io/reader "fake.txt")]
(->> (line-seq r)
(map parse-long)
(map inc)
(filter even?)
(map inc)
(reduce + 0))))
F2는 F1의 트랜스듀서 기반 버전입니다.
(defn f2
[]
(with-open [r (io/reader "fake.txt")]
(transduce (comp (map parse-long)
(map inc)
(filter even?)
(map inc))
+
(line-seq r))))
Criterium을 사용하여 평가했습니다.
(with-progress-reporting (quick-bench (f1) :verbose))
(with-progress-reporting (quick-bench (f2) :verbose))
결과는 다음과 같습니다.
#################### F1 ###################
Evaluation count : 6 in 6 samples of 1 calls.
Execution time sample mean : 3.811858 sec
Execution time mean : 3.812064 sec
#################### F2 ###################
Evaluation count : 6 in 6 samples of 1 calls.
Execution time sample mean : 1.490624 sec
Execution time mean : 1.490777 sec
지연 시퀀스 버전인 F1은 3.812064초가 걸렸습니다. 변환기 버전인 F2는 1.490777을 사용했습니다. 따라서 변환기 버전은 지연 시퀀스 버전보다 155.71% 더 빠릅니다.
간단히 말해서, 이 편향된 실험은 트랜스듀서 버전이 순수한 지연 시퀀스 버전보다 훨씬 빠르다는 것을 보여줍니다.
Reference
이 문제에 관하여(Clojure의 지연 시퀀스 대 변환기 벤치마크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/veer66/clojures-lazy-sequence-versus-transducer-benchmark-37he텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)