山东mip网站建设,唐山网站建设费用,自己创建网页,论坛网站开发文档1.任务、线程、队列 每一个要执行的操作都是任务#xff1a;比如说函数 一个队列中可以放很多个线程#xff0c;一个线程中有很多个任务 可以这样看#xff1a;有一个办事所#xff08;队列#xff09;#xff0c;所里有很多窗口#xff08;线程#xff09;#xff0c…1.任务、线程、队列 每一个要执行的操作都是任务比如说函数 一个队列中可以放很多个线程一个线程中有很多个任务 可以这样看有一个办事所队列所里有很多窗口线程每一个想办事的人任务都要在窗口办。 2.队列种类串行队列、并行队列、系统主队列、系统全局并发队列 可以手动创建的队列 1 串行队列系统为串行队列一般只分配一个线程串行队列中执行任务的线程不允许被当前队列中的任务阻塞此时会死锁但可以被别的队列任务阻塞。 let queue DispatchQueue(label: com.xxx.xxx.queueName) 2 并行队列系统会为并行队列至少分配一个线程线程允许被任何队列的任务阻塞。 let queue DispatchQueue(label: com.xxx.xxx.queueName, attributes: .concurrent) 系统自动帮我们创建的6 条队列1 条系统主队列串行5 条全局并发队列不同优先级它们是我们创建的所有队列的最终目标队列这 6 个队列负责所有队列的线程调度。 3 系统主队列是一个串行队列它主要处理 UI 相关任务也可以处理其他类型任务。 let mainQueue DispatchQueue.main 4 全局并发队列存在 5 个不同的 QoS 级别。 let globalQueue DispatchQueue.global(qos: .background) // 后台运行级别 3.任务种类同步任务、异步任务 1同步任务直接在当前线程中插入任务执行完插入的任务后 线程才能执行原任务会阻塞当前线程。 queue.sync { } 2异步任务队列会安排另一个线程去执行这一任务不会阻塞当前线程。 queue.async { } 总结
队列一共有四种串行队列、并行队列、系统主队列、系统全局并发队列串行队列只有一条线程并且线程中按序执行任务并行队列中可以有很多线程并且执行任务顺序不分先后同步任务会阻塞当前线程并在当前线程立刻执行异步任务不会阻塞当前线程并在与当前线程不同的线程执行如何避免线程死锁不要在串行和主队列中执行同步任务。 更多深入了解
iOS Swift GCD 开发教程 - 掘金