Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- user=> (require '[manifold.deferred :as md] '[manifold.executor :as mex])
- nil
- user=> (def tracing-exec (let [ex (mex/fixed-thread-executor 4)]
- (reify java.util.concurrent.Executor
- (execute [this task]
- (println "Executing:" task)
- (.execute ex task)))))
- #'boot.user/tracing-exec
- ;; Без екзекутора, все работало на РЕПЛ треде
- boot.user=> (-> (md/future (Thread/sleep 1000) 0)
- (md/chain inc)
- (md/chain inc)
- (md/chain inc)
- (md/chain println))
- 3
- ;; С onto, первый коллбек подхватил тред из екзекутора и этот же тред пошел
- ;; выполнять все остально
- boot.user=> (-> (md/future (Thread/sleep 1000) 0) (md/onto tracing-exec) (md/chain inc) (md/chain inc) (md/chain inc) (md/chain println))
- Executing: #object[manifold.deferred.Deferred$fn__7243$fn__7244 0x43fa4a9a manifold.deferred.Deferred$fn__7243$fn__7244@43fa4a9a]
- 3
- ;; With-executor, каждый коллбек в чейне рескедюлиться на тот же экзекьютор
- boot.user=> (mex/with-executor tracing-exec (-> (md/future (Thread/sleep 1000) 0) (md/chain inc) (md/chain inc) (md/chain inc) (md/chain println)))
- Executing: #object[manifold.deferred.Deferred$fn__7243$fn__7244 0x11d701ca manifold.deferred.Deferred$fn__7243$fn__7244@11d701ca]
- Executing: #object[manifold.deferred.Deferred$fn__7243$fn__7244 0x27af4549 manifold.deferred.Deferred$fn__7243$fn__7244@27af4549]
- Executing: #object[manifold.deferred.Deferred$fn__7243$fn__7244 0x2968afcc manifold.deferred.Deferred$fn__7243$fn__7244@2968afcc]
- Executing: #object[manifold.deferred.Deferred$fn__7243$fn__7244 0x2d572e39 manifold.deferred.Deferred$fn__7243$fn__7244@2d572e39]
- 3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement