├── 1.Simple-Producer-Consumer └── simple-core-async │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── doc │ └── intro.md │ ├── project.clj │ ├── src │ └── simple_core_async │ │ └── core.clj │ └── test │ └── simple_core_async │ └── core_test.clj ├── 2.Multi-Chan-Producer-Consumer └── multi-chan-core-async │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── doc │ └── intro.md │ ├── project.clj │ ├── src │ └── multi_chan_core_async │ │ └── core.clj │ └── test │ └── multi_chan_core_async │ └── core_test.clj ├── 3.Tim-Baldridge-10k-Processes └── baldridge-10000 │ ├── index.html │ ├── project.clj │ ├── resources │ └── public │ │ ├── css │ │ └── page.css │ │ ├── help.html │ │ └── js │ │ ├── cljs.js │ │ ├── cljs │ │ ├── core.cljs │ │ ├── core.js │ │ └── core │ │ │ ├── async.cljs │ │ │ ├── async.js │ │ │ └── async │ │ │ └── impl │ │ │ ├── buffers.cljs │ │ │ ├── buffers.js │ │ │ ├── channels.cljs │ │ │ ├── channels.js │ │ │ ├── dispatch.cljs │ │ │ ├── dispatch.js │ │ │ ├── ioc_helpers.cljs │ │ │ ├── ioc_helpers.js │ │ │ ├── protocols.cljs │ │ │ ├── protocols.js │ │ │ ├── timers.cljs │ │ │ └── timers.js │ │ ├── goog │ │ ├── array │ │ │ └── array.js │ │ ├── asserts │ │ │ └── asserts.js │ │ ├── base.js │ │ ├── debug │ │ │ └── error.js │ │ ├── deps.js │ │ ├── object │ │ │ └── object.js │ │ └── string │ │ │ ├── string.js │ │ │ └── stringbuffer.js │ │ ├── hello_clojurescript.js │ │ └── hello_clojurescript │ │ └── client.js │ ├── src │ └── cljs │ │ └── baldridge_10000 │ │ └── client.cljs │ └── target │ ├── cljsbuild-compiler-0 │ ├── cljs │ │ ├── core.cljs │ │ └── core.js │ ├── goog │ │ ├── array │ │ │ └── array.js │ │ ├── asserts │ │ │ └── asserts.js │ │ ├── base.js │ │ ├── debug │ │ │ └── error.js │ │ ├── deps.js │ │ ├── object │ │ │ └── object.js │ │ └── string │ │ │ ├── string.js │ │ │ └── stringbuffer.js │ └── hello_clojurescript.js │ ├── cljsbuild-main.js │ └── stale │ └── extract-native.dependencies ├── 4.Not-10K-Processes └── 10K-no-async │ ├── index.html │ └── js │ └── 10K.js ├── 5.David-Nolen-Display-Pipeline ├── 10,000 Processes.html └── assets │ ├── images │ ├── bb.jpg │ ├── lt.jpg │ ├── om.jpg │ └── sourcemap.png │ ├── js │ ├── blog │ │ ├── processes │ │ │ ├── core.cljs │ │ │ ├── core.js │ │ │ └── core.js.map │ │ └── utils │ │ │ ├── dom.cljs │ │ │ ├── dom.js │ │ │ ├── dom.js.map │ │ │ ├── helpers.cljs │ │ │ ├── helpers.js │ │ │ ├── helpers.js.map │ │ │ ├── node.cljs │ │ │ ├── node.js │ │ │ ├── node.js.map │ │ │ ├── reactive.cljs │ │ │ ├── reactive.js │ │ │ └── reactive.js.map │ ├── cljs │ │ ├── core.cljs │ │ ├── core.js │ │ ├── core.js.map │ │ └── core │ │ │ ├── async.cljs │ │ │ ├── async.js │ │ │ ├── async.js.map │ │ │ └── async │ │ │ └── impl │ │ │ ├── buffers.cljs │ │ │ ├── buffers.js │ │ │ ├── buffers.js.map │ │ │ ├── channels.cljs │ │ │ ├── channels.js │ │ │ ├── channels.js.map │ │ │ ├── dispatch.cljs │ │ │ ├── dispatch.js │ │ │ ├── dispatch.js.map │ │ │ ├── ioc_helpers.cljs │ │ │ ├── ioc_helpers.js │ │ │ ├── ioc_helpers.js.map │ │ │ ├── protocols.cljs │ │ │ ├── protocols.js │ │ │ ├── protocols.js.map │ │ │ ├── timers.cljs │ │ │ ├── timers.js │ │ │ └── timers.js.map │ ├── goog │ │ ├── array │ │ │ └── array.js │ │ ├── asserts │ │ │ └── asserts.js │ │ ├── base.js │ │ ├── debug │ │ │ ├── entrypointregistry.js │ │ │ ├── error.js │ │ │ └── errorhandlerweakdep.js │ │ ├── deps.js │ │ ├── disposable │ │ │ ├── disposable.js │ │ │ └── idisposable.js │ │ ├── dom │ │ │ ├── browserfeature.js │ │ │ ├── classes.js │ │ │ ├── dom.js │ │ │ ├── tagname.js │ │ │ └── vendor.js │ │ ├── events │ │ │ ├── browserevent.js │ │ │ ├── browserfeature.js │ │ │ ├── event.js │ │ │ ├── events.js │ │ │ ├── eventtype.js │ │ │ ├── eventwrapper.js │ │ │ ├── listenable.js │ │ │ └── listener.js │ │ ├── iter │ │ │ └── iter.js │ │ ├── math │ │ │ ├── box.js │ │ │ ├── coordinate.js │ │ │ ├── math.js │ │ │ ├── rect.js │ │ │ └── size.js │ │ ├── mochikit │ │ │ └── async │ │ │ │ └── deferred.js │ │ ├── net │ │ │ ├── jsloader.js │ │ │ └── jsonp.js │ │ ├── object │ │ │ └── object.js │ │ ├── reflect │ │ │ └── reflect.js │ │ ├── string │ │ │ ├── string.js │ │ │ └── stringbuffer.js │ │ ├── structs │ │ │ ├── map.js │ │ │ └── structs.js │ │ ├── style │ │ │ └── style.js │ │ ├── uri │ │ │ ├── uri.js │ │ │ └── utils.js │ │ └── useragent │ │ │ └── useragent.js │ ├── proc.js │ └── proc_.js │ └── themes │ └── tom │ ├── css │ ├── lmroman10-regular-demo.html │ ├── lmroman10-regular-webfont.eot │ ├── lmroman10-regular-webfont.svg │ ├── lmroman10-regular-webfont.ttf │ ├── lmroman10-regular-webfont.woff │ ├── screen.css │ └── syntax.css │ └── images │ └── rss.png ├── 6.Rich-Hickey-Original-Ants └── ants-demo │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── doc │ └── intro.md │ ├── project.clj │ ├── src │ └── ants_demo │ │ └── core.clj │ └── test │ └── ants_demo │ └── core_test.clj ├── 7.Ants-CLJS-Single-Threaded └── ants-cljs │ ├── .lein-repl-history │ ├── ants_cljs.js │ ├── cljs workflow.rtf │ ├── css │ ├── main.css │ └── normalize.css │ ├── index.html │ ├── out │ ├── ants_cljs │ │ ├── core.cljs │ │ ├── core.js │ │ └── core.js.map │ ├── cljs │ │ ├── core.cljs │ │ ├── core.js │ │ ├── core.js.map │ │ └── core │ │ │ ├── async.cljs │ │ │ ├── async.js │ │ │ ├── async.js.map │ │ │ └── async │ │ │ └── impl │ │ │ ├── buffers.cljs │ │ │ ├── buffers.js │ │ │ ├── buffers.js.map │ │ │ ├── channels.cljs │ │ │ ├── channels.js │ │ │ ├── channels.js.map │ │ │ ├── dispatch.cljs │ │ │ ├── dispatch.js │ │ │ ├── dispatch.js.map │ │ │ ├── ioc_helpers.cljs │ │ │ ├── ioc_helpers.js │ │ │ ├── ioc_helpers.js.map │ │ │ ├── protocols.cljs │ │ │ ├── protocols.js │ │ │ ├── protocols.js.map │ │ │ ├── timers.cljs │ │ │ ├── timers.js │ │ │ └── timers.js.map │ └── goog │ │ ├── array │ │ └── array.js │ │ ├── asserts │ │ └── asserts.js │ │ ├── base.js │ │ ├── debug │ │ ├── entrypointregistry.js │ │ ├── error.js │ │ └── errorhandlerweakdep.js │ │ ├── deps.js │ │ ├── disposable │ │ ├── disposable.js │ │ └── idisposable.js │ │ ├── dom │ │ ├── browserfeature.js │ │ ├── classes.js │ │ ├── dom.js │ │ ├── nodetype.js │ │ └── tagname.js │ │ ├── events │ │ ├── browserevent.js │ │ ├── browserfeature.js │ │ ├── event.js │ │ ├── eventid.js │ │ ├── events.js │ │ ├── eventtype.js │ │ ├── eventwrapper.js │ │ ├── listenable.js │ │ ├── listener.js │ │ └── listenermap.js │ │ ├── functions │ │ └── functions.js │ │ ├── math │ │ ├── coordinate.js │ │ ├── math.js │ │ └── size.js │ │ ├── object │ │ └── object.js │ │ ├── reflect │ │ └── reflect.js │ │ ├── string │ │ ├── string.js │ │ └── stringbuffer.js │ │ └── useragent │ │ └── useragent.js │ ├── project.clj │ ├── src │ └── ants_cljs │ │ └── core.cljs │ └── target │ └── stale │ └── extract-native.dependencies ├── 8.Ants-CLJS-Core-Async └── ants-cljs │ ├── .lein-repl-history │ ├── ants_cljs.js │ ├── css │ ├── main.css │ └── normalize.css │ ├── index.html │ ├── out │ ├── ants_cljs │ │ ├── core.cljs │ │ ├── core.js │ │ └── core.js.map │ ├── cljs │ │ ├── core.cljs │ │ ├── core.js │ │ ├── core.js.map │ │ └── core │ │ │ ├── async.cljs │ │ │ ├── async.js │ │ │ ├── async.js.map │ │ │ └── async │ │ │ └── impl │ │ │ ├── buffers.cljs │ │ │ ├── buffers.js │ │ │ ├── buffers.js.map │ │ │ ├── channels.cljs │ │ │ ├── channels.js │ │ │ ├── channels.js.map │ │ │ ├── dispatch.cljs │ │ │ ├── dispatch.js │ │ │ ├── dispatch.js.map │ │ │ ├── ioc_helpers.cljs │ │ │ ├── ioc_helpers.js │ │ │ ├── ioc_helpers.js.map │ │ │ ├── protocols.cljs │ │ │ ├── protocols.js │ │ │ ├── protocols.js.map │ │ │ ├── timers.cljs │ │ │ ├── timers.js │ │ │ └── timers.js.map │ └── goog │ │ ├── array │ │ └── array.js │ │ ├── asserts │ │ └── asserts.js │ │ ├── base.js │ │ ├── debug │ │ ├── entrypointregistry.js │ │ ├── error.js │ │ └── errorhandlerweakdep.js │ │ ├── deps.js │ │ ├── disposable │ │ ├── disposable.js │ │ └── idisposable.js │ │ ├── dom │ │ ├── browserfeature.js │ │ ├── classes.js │ │ ├── dom.js │ │ ├── nodetype.js │ │ └── tagname.js │ │ ├── events │ │ ├── browserevent.js │ │ ├── browserfeature.js │ │ ├── event.js │ │ ├── eventid.js │ │ ├── events.js │ │ ├── eventtype.js │ │ ├── eventwrapper.js │ │ ├── listenable.js │ │ ├── listener.js │ │ └── listenermap.js │ │ ├── functions │ │ └── functions.js │ │ ├── math │ │ ├── coordinate.js │ │ ├── math.js │ │ └── size.js │ │ ├── object │ │ └── object.js │ │ ├── reflect │ │ └── reflect.js │ │ ├── string │ │ ├── string.js │ │ └── stringbuffer.js │ │ └── useragent │ │ └── useragent.js │ ├── project.clj │ ├── src │ └── ants_cljs │ │ └── core.cljs │ └── target │ └── stale │ └── extract-native.dependencies ├── 9.Ants-CLJS-Array-Optimised └── ants-cljs │ ├── .lein-repl-history │ ├── ants_cljs.js │ ├── css │ ├── main.css │ └── normalize.css │ ├── index.html │ ├── out │ ├── ants_cljs │ │ ├── core.cljs │ │ ├── core.js │ │ └── core.js.map │ ├── cljs │ │ ├── core.cljs │ │ ├── core.js │ │ ├── core.js.map │ │ └── core │ │ │ ├── async.cljs │ │ │ ├── async.js │ │ │ ├── async.js.map │ │ │ └── async │ │ │ └── impl │ │ │ ├── buffers.cljs │ │ │ ├── buffers.js │ │ │ ├── buffers.js.map │ │ │ ├── channels.cljs │ │ │ ├── channels.js │ │ │ ├── channels.js.map │ │ │ ├── dispatch.cljs │ │ │ ├── dispatch.js │ │ │ ├── dispatch.js.map │ │ │ ├── ioc_helpers.cljs │ │ │ ├── ioc_helpers.js │ │ │ ├── ioc_helpers.js.map │ │ │ ├── protocols.cljs │ │ │ ├── protocols.js │ │ │ ├── protocols.js.map │ │ │ ├── timers.cljs │ │ │ ├── timers.js │ │ │ └── timers.js.map │ └── goog │ │ ├── array │ │ └── array.js │ │ ├── asserts │ │ └── asserts.js │ │ ├── base.js │ │ ├── debug │ │ ├── entrypointregistry.js │ │ ├── error.js │ │ └── errorhandlerweakdep.js │ │ ├── deps.js │ │ ├── disposable │ │ ├── disposable.js │ │ └── idisposable.js │ │ ├── dom │ │ ├── browserfeature.js │ │ ├── classes.js │ │ ├── dom.js │ │ └── tagname.js │ │ ├── events │ │ ├── browserevent.js │ │ ├── browserfeature.js │ │ ├── event.js │ │ ├── events.js │ │ ├── eventtype.js │ │ ├── eventwrapper.js │ │ ├── listenable.js │ │ └── listener.js │ │ ├── math │ │ ├── coordinate.js │ │ ├── math.js │ │ └── size.js │ │ ├── object │ │ └── object.js │ │ ├── reflect │ │ └── reflect.js │ │ ├── string │ │ ├── string.js │ │ └── stringbuffer.js │ │ └── useragent │ │ └── useragent.js │ ├── project.clj │ ├── src │ ├── ants_cljs │ │ └── core.cljs │ └── chambered │ │ └── macros.clj │ └── target │ └── stale │ └── extract-native.dependencies └── README.md /1.Simple-Producer-Consumer/simple-core-async/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | -------------------------------------------------------------------------------- /1.Simple-Producer-Consumer/simple-core-async/README.md: -------------------------------------------------------------------------------- 1 | # simple-core-async 2 | 3 | FIXME: description 4 | 5 | ## Installation 6 | 7 | Download from http://example.com/FIXME. 8 | 9 | ## Usage 10 | 11 | FIXME: explanation 12 | 13 | $ java -jar simple-core-async-0.1.0-standalone.jar [args] 14 | 15 | ## Options 16 | 17 | FIXME: listing of options this app accepts. 18 | 19 | ## Examples 20 | 21 | ... 22 | 23 | ### Bugs 24 | 25 | ... 26 | 27 | ### Any Other Sections 28 | ### That You Think 29 | ### Might be Useful 30 | 31 | ## License 32 | 33 | Copyright © 2014 FIXME 34 | 35 | Distributed under the Eclipse Public License either version 1.0 or (at 36 | your option) any later version. 37 | -------------------------------------------------------------------------------- /1.Simple-Producer-Consumer/simple-core-async/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to simple-core-async 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/great-documentation/what-to-write/) 4 | -------------------------------------------------------------------------------- /1.Simple-Producer-Consumer/simple-core-async/project.clj: -------------------------------------------------------------------------------- 1 | (defproject simple-core-async "0.1.0-SNAPSHOT" 2 | :description "FIXME: write description" 3 | :url "http://example.com/FIXME" 4 | :license {:name "Eclipse Public License" 5 | :url "http://www.eclipse.org/legal/epl-v10.html"} 6 | :dependencies [[org.clojure/clojure "1.5.1"] 7 | [org.clojure/core.async "0.1.301.0-deb34a-alpha"]] 8 | :main ^:skip-aot simple-core-async.core 9 | :target-path "target/%s" 10 | :profiles {:uberjar {:aot :all}}) 11 | -------------------------------------------------------------------------------- /1.Simple-Producer-Consumer/simple-core-async/src/simple_core_async/core.clj: -------------------------------------------------------------------------------- 1 | (ns simple-core-async.core 2 | (:gen-class) 3 | (:require [clojure.core.async :as async :refer [! !! timeout chan alt! go close!]])) 4 | 5 | (defn -main 6 | [& args] 7 | (println "Starting!") 8 | 9 | (let [my-q (chan 5) 10 | my-seq (seq "Hello World")] 11 | (go 12 | (doseq [item my-seq] 13 | (>! my-q item) 14 | (! !! timeout chan alt! go close! alts!]])) 4 | 5 | (defn -main 6 | [& args] 7 | (println "Starting!") 8 | 9 | (let [my-q1 (chan 5) 10 | my-q2 (chan 5) 11 | my-seq1 (seq "Hello World") 12 | my-seq2 (range 10)] 13 | (go 14 | (doseq [item my-seq1] 15 | (>! my-q1 item) 16 | (! my-q2 item) 21 | ( 2 |
3 | 4 | 5 |