tôi sao chép mã từ:Clojure Transients Ví dụ - Không đáng kể tăng tốc
nhưng kết quả của tôi khác signifiantly từ những gì đã được đăng.
(defn vrange [n]
(loop [i 0 v []]
(if (< i n)
(recur (inc i) (conj v i))
v)))
(defn vrange2 [n]
(loop [i 0 v (transient [])]
(if (< i n)
(recur (inc i) (conj! v i))
(persistent! v))))
(quick-bench (def v (vrange 1000000)))
"Elapsed time: 459.59 msecs"
(quick-bench (def v2 (vrange2 1000000)))
"Elapsed time: 379.85 msecs"
Tốc độ tăng nhẹ nhưng không có gì giống như tăng 8x được ngụ ý trong tài liệu ví dụ?
Bắt đầu từ java trong chế độ máy chủ thay đổi câu chuyện, nhưng vẫn không có gì giống như các tài liệu ..
(quick-bench (def v (vrange 1000000)))
"Elapsed time: 121.14 msecs"
(quick-bench (def v2 (vrange2 1000000)))
"Elapsed time: 75.15 msecs"
Là nó mà việc triển khai kéo dài đã được cải thiện kể từ khi bài về transients đây: http://clojure.org/transients?
Yếu tố nào khác có thể góp phần vào việc không tăng cường với chuyển tiếp?
Tôi đang sử dụng phiên bản java OpenJDK 1.7 trên ubuntu 12.04. Có lẽ đó là chậm hơn rất nhiều so với (được cho là) Hotspot 1.6 phiên bản được sử dụng trong các tài liệu? Nhưng không phải điều đó hàm ý BOTH sẽ chậm hơn một chút, với khoảng cách tương tự?
Cảm ơn Diego. Đây là những gì tôi hy vọng * là lý do. Nói cách khác, nó không phải là transients chậm hơn so với báo cáo trong tài liệu, đó là các bộ sưu tập liên tục nhanh hơn. – Scott