A Helper_thread is a thread that is dedicated to handling computations external to Async. We need them because some libraries (e.g. Sqlite3) require that certain collections of computations run in the same thread.
create ?name ()
creates a new helper thread. The name
will be used as the
thread name for any work that that is done by the thread that doesn't get its own
name.
create
uses a thread from Async's thread pool, reserving that thread for exclusive
use by the helper thread until the helper thread is no longer used (specifically,
finalized and is finished with all its work), at which point the thread is made
available for general use by the pool.
create
returns a deferred that becomes determined when a helper thread is
available. On the other hand, create_now
checks if a helper thread is available
now, and if so returns it, or else returns Error
.