Jac*_*kie 8 grand-central-dispatch ios
我看到一些使用gcd的方法,但有些方法可能会这样做:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(queue, ^{
dispatch_sync(dispatch_get_main_queue(), ^{
});
});
Run Code Online (Sandbox Code Playgroud)
但其他人可能会这样做:
imageQueue_ = dispatch_queue_create("com.company.app.imageQueue", NULL);
dispatch_async(imageQueue_, ^{
dispatch_async(dispatch_get_main_queue(), ^{
});
});
Run Code Online (Sandbox Code Playgroud)
有什么区别?如果我想从网上下载很多图片,哪个更好?
ama*_*ttn 20
概念化队列的最佳方法是首先意识到,在非常低级别,只有两种类型的队列:串行和并发.
串行队列是一夫一妻制,但未提交.如果为每个串行队列分配一堆任务,它将一次运行一个任务,一次只使用一个线程.未提交的方面是序列号队列可能会切换到任务之间的不同线程.串行队列始终等待任务完成,然后再转到下一个任务.因此,任务以FIFO顺序完成.您可以根据需要创建任意数量的串行队列.
该主队列是一个特殊的串行队列.与其他未提交的串行队列不同,因为它们"约会"许多线程但只有一个线程,主队列与主线程"结合"并且所有任务都在其上执行.主队列与主线程的runloop表现良好,因此小操作不会阻止UI和其他重要位.与所有串行队列一样,任务以FIFO顺序完成.
如果串行队列是一夫一妻制的,则并发队列是混杂的.他们会将任务提交给任何可用的线程,甚至根据系统负载创建新的线程.他们可以在不同的线程上同时执行多个任务.提交到全局队列的任务是线程安全的并且最小化副作用是很重要的.任务以FIFO顺序提交执行,但不保证完成顺序.
将其恢复,所有全局队列都是并发的,默认情况下所有用户队列都是串行的,除非将其定义为并发.
如果您的目标是下载图像,则可能需要串行(用户)队列.下载图像更像带宽.你通常只想一次做一个(或几个).
编辑:博客文章扩展上述答案:http://amattn.com/2013/08/28/grand_central_dispatch_gcd_summary_syntax_best_practices.html
| 归档时间: |
|
| 查看次数: |
5346 次 |
| 最近记录: |