title: dispatch_async vs. dispatch_sync using Serial Queues in Grand Central Dispatch
body: <p>OK, I love Grand Central Dispatch and after using it with relative success but this is something I don't fully understand.</p>
  
  <p>Suppose I have created my own serial queue using </p>
  
  <pre><code>dispatch_queue_t myQueue;
  myQueue = dispatch_queue_create("myQueue", NULL);
  </code></pre>
  
  <p>After that I do this:</p>
  
  <pre><code>dispatch_async(myQueue, ^{
    [self doStuff1];
  });
  
  // and a few lines later...
  
  dispatch_sync(myQueue, ^{
    [self doStuff2];
  });
  </code></pre>
  
  <p>The first dispatch is async. So, it will be done concurrently, right? How can that be if myQueue is serial? How can a serial queue do things in parallel or, if you will, out of order?</p>
  
  <p>thanks</p>