title: Clojure: future, agent or core.async for IO
body: <p>Say that there are 4 components:</p>
  
  <ol>
  <li>interactive data collection via http (<em>survey</em>)</li>
  <li><em>atom</em>, which accumulates survey stages</li>
  <li><em>cpu-heavy computation</em></li>
  <li><em>database writer</em></li>
  </ol>
  
  <p>I try to achieve last two operations be asyncronous, like placing accumulated data somewhere in a queue and start collecting other survey, while <strong>something</strong> processes data and <strong>something else</strong> does IO with any of previously prepared data.</p>
  
  <p>The quesion is what feature of language to use? In <em>Clojure Programming</em> book there are examples of using <em>agents</em> as components to perform IO operations, but doesn't futures offer same "fire and forget" facilities? Or agent is still an identity like atom or ref and not an actor at all?</p>