3. 队列的轮回、挂起、恢复
3.1 dispatch_apply
- public class func concurrentPerform(iterations: Int, execute work: (Int) -> Swift.Void)
本来轮回履行就是为了节约时光的嘛,所以默认就是用了并行队列。我们测验测验一下用这个进级版的dispatch_apply让它履行10次打印义务。
- @IBAction func useDispatchApply(_ sender: Any) {
- print("Begin to start a DispatchApply")
- DispatchQueue.concurrentPerform(iterations: 10) { (index) in
- print("Iteration times:\(index),Thread = \(Thread.current)")
- }
- print("Iteration have completed.")
- }
GCD的义务组在开辟中是经常被应用到,当须要一组义务停止后再履行一些操作时,就可以用它啦。
运行结不雅如下:
DispatchGroup的职责就是当队列中的所有义务都履行完毕后,会发出一个通知来告诉告诉大年夜家,义务组中所履行的队列中的义务履行完毕了。
看,是不是所有的义务都是并行进行的?标红的处所,长短典范技巧宅想提示一下大年夜家这里照样有一些义务是在主线程中进行的。它轮回履行并行队列中的义务时,会开辟新的线程,不过有可能会在当前哨程中履行一些义务。
如不雅须要轮回的义务琅绫擎有特别耗时的操作,我们上一篇文┞仿琅绫擎说是应当放在global琅绫擎的。若何避免在主线迟疑作这个呐???
- 来,给三秒时光想想。看到调用这个办法的时刻是不是就是在UI线程琅绫擎这么写下来的嘛?那就开启一个gloablQueue,让它来进行不就好了嘛!BINGO!这位同窗,你已经深得真谛,可以下学后到我家后花圃来了。嘿嘿✧(≖ ◡ ≖✿)嘿嘿
3.2 队列的挂起与唤醒
如不雅一大年夜堆义务履行着的时刻,忽然后面的义务不想履行的。那怎么办呐?我们可以让它临时先挂起,等想好了再让它们运行起来。
推荐阅读
沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 近日,Priceonomics网站应用Redbooth的数据,梳理统计出以前三年,40个国度所有行业的临盆和义务完成情况。结不雅显示>>>详细阅读
本文标题:Swift多线程:GCD进阶,单例、信号量、任务组
地址:http://www.17bianji.com/lsqh/40679.html
1/2 1