title: How queues and threading work?
body: <p>This is related to the Grand Central Dispatch API used in objective-c, with the following codes:</p>
  
  <pre><code>dispatch_queue_t downloadQueue = dispatch_queue_create("other queue", NULL);
  dispatch_async(downloadQueue, ^{
      ....some functions that retrieves data from server...
      dispatch_async(dispatch_get_main_queue(), ^{
          NSLog(@"got it");
      });
  });
  dispatch_release(downloadQueue);
  </code></pre>
  
  <p>My current understanding of how queues work is that the blocks in a queue will go on a thread for that queue. So two queues will become two threads. With multi-threading, those two queues will happen simultaneously. 
  However, the "got it" appears right at when the program received the data. How did that happen?</p>
  
  <p>Please point out if you want to correct or add to my understanding of threading and queue.</p>