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

相关推荐
若水无华6 小时前
fiddler 配置ios手机代理调试
ios·智能手机·fiddler
不二狗6 小时前
每日算法 -【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进
开发语言·算法·swift
Aress"7 小时前
【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件
ios·uni-app·ipa安装
Jouzzy16 小时前
【iOS安全】Dopamine越狱 iPhone X iOS 16.6 (20G75) | 解决Jailbreak failed with error
安全·ios·iphone
瓜子三百克16 小时前
采用sherpa-onnx 实现 ios语音唤起的调研
macos·ios·cocoa
左钦杨17 小时前
IOS CSS3 right transformX 动画卡顿 回弹
前端·ios·css3
努力成为包租婆19 小时前
SDK does not contain ‘libarclite‘ at the path
ios
安和昂1 天前
【iOS】Tagged Pointer
macos·ios·cocoa
I烟雨云渊T2 天前
iOS 阅后即焚功能的实现
macos·ios·cocoa
struggle20252 天前
适用于 iOS 的 开源Ultralytics YOLO:应用程序和 Swift 软件包,用于在您自己的 iOS 应用程序中运行 YOLO
yolo·ios·开源·app·swift