title: Does Boost.Fiber automatically yield on network requests, such as a database call over the network?
body: <p>Does Boost.Fiber automatically yield on network requests (if I understand correctly they yield the CPU during I/O), such as a database call over the network? I want to use it for setting up blocking database calls where I am inserting a lot of information and have a lot of small records that need to be inserted when they are received. My other choice would be libdill/libmill for the microthreading.</p>
  
  <p>The general idea would be:</p>
  
  <ol>
  <li>receive data</li>
  <li>create fiber and pass it the data</li>
  <li>fiber gets a database connection and sends the INSERT query (libpqxx with postgres)</li>
  <li>other fibers run and can access the database while the database query is in flight</li>
  <li>query returns from database, do error handling and process response</li>
  </ol>
  
  <p>Do fibers work this way as I am envisioning it?</p>
  
  <p>This is the simplified base structure for the code using RapidJSON and boost.fiber, but I'm getting the messages from the network (websocket):</p>
  
  <pre><code>inline
  void doDatabaseCall( Document &amp;msg ) {
       //Get connection &amp; do query with libpqxx
  }
  
  Document msg;
  msg.Parse( "{\"myVar\": \"test\"}" );
  Document msg2;
  msg2.Parse( "{\"myVar\": \"test2\"}" );
  boost::fibers::fiber f1( doDatabaseCall, msg);
  boost::fibers::fiber f2( doDatabaseCall, msg2);
  f1.join();
  f2.join();
  </code></pre>