title: Concurrent vs serial queues in GCD
body: <p>I'm struggling to fully understand the concurrent and serial queues in GCD. I have some issues and hoping someone can answer me clearly and at the point.</p>
  
  <ol>
  <li><p>I'm reading that serial queues are created and used in order to execute tasks one after the other. However, what happens if:</p>
  
  <ul>
  <li>I create a serial queue</li>
  <li>I use <code>dispatch_async</code> (on the serial queue I just created) three times to dispatch three blocks A,B,C</li>
  </ul>
  
  <p>Will the three blocks be executed:</p>
  
  <ul>
  <li><p>in order A,B,C because the queue is serial</p>
  
  <p>OR</p></li>
  <li>concurrently (in the same time on parralel threads) because I used ASYNC dispatch</li>
  </ul></li>
  <li><p>I'm reading that I can use <code>dispatch_sync</code> on concurrent queues in order to execute blocks one after the other. In that case, WHY do serial queues even exist, since I can always use a concurrent queue where I can dispatch SYNCHRONOUSLY as many blocks as I want?</p>
  
  <p>Thanks for any good explanation!</p></li>
  </ol>