Size: a a a

Clojure — русскоговорящее сообщество

2020 January 19

MN

Maksim N in Clojure — русскоговорящее сообщество
Редко можно увидеть прям вакансии "Junior Clojure(Script) developer"
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Sergey Trofimov
кто-нибудь может указать более эффективный алгоритм для такого?
https://github.com/serioga/clojure-benhcmarks/blob/master/src/clojure_benchmarks/long_adder.clj#L343-L346
  (let [xs (range 1e8)
       chunk-size 1e5]
   (time
     (loop [xs xs]
       (when-some [chunk (seq (take chunk-size xs))]
         (do :nothing)
         (recur (drop chunk-size xs))))))
 "Elapsed time: 5883.1539 msecs"
Обход чанками?

(defn by-chunks [size coll]
 (partition size size [] coll))

(doseq [chunk (by-chunks 100 (get-data))]
 (process-chunk chunk))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ivan Grishaev
Обход чанками?

(defn by-chunks [size coll]
 (partition size size [] coll))

(doseq [chunk (by-chunks 100 (get-data))]
 (process-chunk chunk))
partition ещё медленнее получается
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
слайсами можно, если вектор
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
partition ещё медленнее получается
а то бы я вручную цикл писал 😞
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
pmap заряди
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну и зависит от того, откуда данные приходят
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ivan Grishaev
pmap заряди
для pmap нужно разбить задачу на куски...
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
partition ещё медленнее получается
хотя в изолированном виде не похоже, что медленнее...
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
какая прелесть
(partition 1e2 (range 1000))

возвращает пустую последовательность...
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
надо его врапнуть как в примере выше.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
параметры pad и другие на дефолтах ведут себя кривовато
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
partition ещё медленнее получается
  (let [xs (range 1e8)
       chunk-size (int 1e5)]
   (time
     (doseq [chunk (partition chunk-size xs)]
       (do :nothing))))
 "Elapsed time: 39011.1054 msecs"


в 6-7 раз медленнее
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ivan Grishaev
слайсами можно, если вектор
вектор из range такого размера у меня на машине делается 15-20 секунд 😊
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
так если это монотонный range, можно построить чанки
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(range 0 1000) (range 1001 9999) ...
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
по опорным индексам
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
range взят для примера
источник

AK

Azamat Kalimoulline in Clojure — русскоговорящее сообщество
Sergey Trofimov
кто-нибудь может указать более эффективный алгоритм для такого?
https://github.com/serioga/clojure-benhcmarks/blob/master/src/clojure_benchmarks/long_adder.clj#L343-L346
  (let [xs (range 1e8)
       chunk-size 1e5]
   (time
     (loop [xs xs]
       (when-some [chunk (seq (take chunk-size xs))]
         (do :nothing)
         (recur (drop chunk-size xs))))))
 "Elapsed time: 5883.1539 msecs"
А какое тут полезное действие? Никакое?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Azamat Kalimoulline
А какое тут полезное действие? Никакое?
полезное действие пустое, чтобы замерить затраты на вспомогательные операции
источник