Основная очередь является последовательной, поэтому по ней будет работать только одна вещь за раз.Если несколько блоков отправляются в основную очередь одновременно, они будут выполняться последовательно.
Как правило, следует избегать думать об этом с точки зрения потоков.Потоки, как правило, являются деталями реализации, над которыми располагаются очереди.(Если вы активно создаете свои собственные потоки, например, с помощью pthreads, вам следует избегать этого и использовать очереди.) Потоки и очереди не являются однозначными, за исключением основного потока и основной очереди, которые связаныдруг другу.
Это важно, потому что вы обычно не "запускаете код в потоке".Вы отправляете блок в очередь, и GCD планирует этот блок на некоторый поток.Когда вы видите это таким образом, то поведение главной очереди должно стать более понятным.