我所知道和理解的如下:
全局队列是一个并发队列,可以将任务分派到多个线程。执行任务的顺序不保证。例如:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), {
for (int i; i<10; i++) {
doTask()
}
})
如果我想分派到串行队列,我可以使用
dispatch_async(dispatch_queue_create("my.serial.queue", nil) {
...
}
每次只有一个任务被分派到一个线程并执行,顺序为FIFO。
===== 我困惑和不完全理解的地方 ========
主线程有一个NSRunLoop,在主线程循环任务。我想知道调度队列和运行循环之间的关系是什么?能否这样理解:如果将任务分派到主线程,则主线程的NSRunLoop接收分派的任务并执行它?
那么分派任务到多个线程的全局队列呢?iOS/OSX系统会自动为每个线程创建NSRunLoop吗?然后每个线程中的运行循环从全局队列中获取分派的任务并执行?
谁知道线程?
dispatch_async()
和dispatch_sync()
函数是否知道将任务分派到哪个线程,或者是队列知道将任务分派到哪个线程?是否有一种程序化的方法可以从调度队列中获取NSRunLoop对象(分派任务的线程)?(此问题与问题3有关)