Wil*_*ham 3 multithreading objective-c grand-central-dispatch
这与objective-c中使用的Grand Central Dispatch API有关,具有以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
我目前对队列如何工作的理解是队列中的块将进入该队列的线程.所以两个队列将成为两个线程.使用多线程,这两个队列将同时发生.但是,当程序收到数据时,"得到它"就出现了.那是怎么发生的?
请指出您是否要更正或添加我对线程和队列的理解.
所以两个队列将成为两个线程.
不必要.GCD的一个优点是系统根据可用CPU核心数量和其他因素动态决定它创建的线程数.很可能两个自定义队列在同一个后台线程上执行,特别是如果两个队列中很少有任务等待执行.
您唯一可以确定的是,串行队列永远不会同时使用多个线程.因此,您添加到同一(串行)队列的任务将始终按顺序执行.您使用的三个并发全局队列不是这种情况dispatch_get_global_queue().
此外,主队列(您访问的队列dispatch_get_main_queue())始终绑定到主线程.它是唯一一个在程序主线程上执行任务的队列.
在您的示例中,在downloadQueue后台线程上执行gets 的任务.一旦代码到达dispatch_async(dispatch_get_main_queue(), ^{,GCD就会将这个新任务推送到主线程,在主线程中,如果主线程不忙于其他事情,它几乎立即被执行.
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |