Using a thread pool for parallel resolvers
When you run Pathom in Clojure with the parallel-connect, the resolver functions are
running inside core.async go
blocks. However, in case of CLJS most IO is async, making
this a non-issue, but if you are in the Java environment and doing blocking IO, this means
the code is doing IO on go
blocks, which is a No-No.
If you can switch to some library that does async IO that’s the best option, but if you
can’t or won’t as of now, Pathom provides a thread pool helper so you can tell the engine to
run the resolvers there to avoid blocking the go
blocks.
Here is an example of how to setup a thread pool (clj only!):
(def parser
(p/parallel-parser
{::p/env {::p/reader [p/map-reader
pc/parallel-reader
pc/open-ident-reader
p/env-placeholder-reader]
; setup the thread pool
::pc/thread-pool (pc/create-thread-pool (async/chan 200))
::p/placeholder-prefixes #{">"}}
::p/mutate pc/mutate-async
::p/plugins [(pc/connect-plugin {::pc/register []})
p/error-handler-plugin
p/trace-plugin]}))