iOS线程

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 开发教程 - 掘金

相关推荐
ZZH_AI项目交付15 小时前
同一套前摄心率算法,为什么 iPhone 16 Pro 稳,iPhone XR 会失准?
ios·app·ai编程
DeMinds16 小时前
内容没有丢,我为什么总在重新整理?|DeMinds 如何让工作接着继续
ios·github·markdown
apd_csdn16 小时前
清华邮箱苹果邮件app设置(全)
ios·thu
MDM.Plus17 小时前
从“遥控”到“自治”:苹果 MDM 技术的代际跨越与业务重构
ios·智能手机·重构·mdm
黑化旺仔17 小时前
iOS - 天气预报仿写总结
ios
Coffeeee18 小时前
ios零基础的Android开发能否靠AI让老板省一笔人工费呢
android·ios·ai编程
2501_9160074718 小时前
深入理解HTTPS对称与非对称加密机制及Charles抓包实践
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9160088918 小时前
HTTPS 抓包遇到证书绑定怎么办,使用 TraceEagle 解除 App 证书校验
网络协议·计算机网络·http·网络安全·ios·adb·https
白玉cfc19 小时前
【iOS】MRC和ARC
macos·ios·cocoa
2501_9159214320 小时前
从零开始学 Swift iOS 开发 iOS应用入门
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程