title: Can you mix agent action submission using `send` and `send-off` in Clojure? What is supposed to happen?
body: <p>I understand a Clojure "agent" is a <code>ref</code> with an added work queue of "actions". Actions are functions that are called with the <code>ref</code>'s value at first position and can be passed additional parameters. Actions return a new value for the <code>ref</code>. Thus an "agent" is a device which computes <em>ref := (action_[n] ° action_[n-1] ° action_[n-2] ° ... ° action_[1] ° action_[0]) (ref)</em>, likely with action-induced side-effects.</p>
  
  <p>A call <code>(send-off agent action &amp; args)</code> results in <code>action</code> being enqueued for asynchronous processing by a separate thread assigned by the system to the <code>agent</code> (from a growable thread pool, as I understand, and once the agent's queue is empty, the thread is either stopped or goes back into the pool).</p>
  
  <p>A call <code>(send agent action &amp; args)</code> results in <code>action</code> being enqueued for asynchronous processing by thread from a fixed system pool, where the thread is switched between actions belonging to multiple agents. In that case, the <code>action</code> should avoid blocking or hogging the thread for all too long.</p>
  
  <p>So far so good, but what happens if some actions are enqueued with <code>send</code> and some with <code>send-off</code> to the same agent? Will the system switch between its two processing modes as it dequeues the action from the agent's queue? </p>