iOS线程和队列的关系

iOS多线程__线程与队列 iOS中的队列与线程,队列与线程的组合,主线程与主队列的关系 阅读详情

 

线程与队列说不清道不明的关系:

线程是代码执行的路径,队列则是用于保存以及管理任务的,线程负责去队列中取任务进行执行。 我的理解:多个队列的任务可以在一条线程上执行,一个队列的任务也可以在多条线程上执行。个人理解,队列可以包含线程,线程也可以包含队列。

dispatch_sync:立马在当前线程执行任务,执行完再往下走,这句话就可以解释很多问题。

dispatch_async:不要求立马在当前线程执行任务,可能会开启新线程,也有可能不会。

一、画图解释下队列跟线程间的关系

1、一个队列对应一个线程

"主队列" 对应 "主线程"

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blueColor];
    [self threadTest];
}
- (void)threadTest{
    NSLog(@"我是任务1");
    NSLog(@"我是任务2");
}
复制代码

 

 

 

2、一个队列对应两个线程

"队列1" 对应 "主线程"和"新线程" (因为主队列没有开启新线程的能力所以用"队列1")

- (void)threadTest{
    dispatch_queue_t queue = dispatch_queue_create("队列1", DISPATCH_QUEUE_SERIAL);
    //同步 不开启新线程,所以在主线程执行
    dispatch_sync(queue, ^{
        NSLog(@"任务1");
        [self getCurrentThread];
    });
    //异步 开启新线程
    dispatch_async(queue, ^{
        NSLog(@"任务2");//2️⃣
        [self getCurrentThread];
    });
    sleep(3);//如果没有这个方法,2️⃣3️⃣的执行先后顺序是不确定的,因为是两个线程,执行先后没有一毛钱关系
    NSLog(@"方法执行结束");//3️⃣
}
- (void)getCurrentThread{
    NSThread *currentThread = [NSThread currentThread];
    NSLog(@"currentThread == %@",currentThread);
}
复制代码
2018-06-20 14:40:05.904914+0800 WLZCyclycReference[4497:158751] 任务1
2018-06-20 14:40:05.905099+0800 WLZCyclycReference[4497:158751] currentThread == <NSThread: 0x60800007c000>{number = 1, name = main}
2018-06-20 14:40:05.905230+0800 WLZCyclycReference[4497:158829] 任务2
2018-06-20 14:40:05.905381+0800 WLZCyclycReference[4497:158829] currentThread == <NSThread: 0x608000270800>{number = 3, name = (null)}
2018-06-20 14:40:08.906308+0800 WLZCyclycReference[4497:158751] 方法执行结束
复制代码

 

 

 

3、两个队列对应一个线程

"主队列"和"队列1" 对应 "主线程"

- (void)threadTest{
    dispatch_queue_t queue = dispatch_queue_create("队列1", DISPATCH_QUEUE_SERIAL);
    NSLog(@"我是任务2");
    [self getCurrentThread];
    //同步 不开启新线程,所以在主线程执行
    dispatch_sync(queue, ^{
        sleep(3);//睡三秒可以解释很多问题
        NSLog(@"我是任务1");
        [self getCurrentThread];
    });
    NSLog(@"方法执行结束");
}
- (void)getCurrentThread{
    NSThread *currentThread = [NSThread currentThread];
    NSLog(@"currentThread == %@",currentThread);
}
复制代码
2018-06-20 14:53:39.210769+0800 WLZCyclycReference[4741:169494] 我是任务2
2018-06-20 14:53:39.210959+0800 WLZCyclycReference[4741:169494] currentThread == <NSThread: 0x608000065640>{number = 1, name = main}
2018-06-20 14:53:42.212170+0800 WLZCyclycReference[4741:169494] 我是任务1
2018-06-20 14:53:42.212615+0800 WLZCyclycReference[4741:169494] currentThread == <NSThread: 0x608000065640>{number = 1, name = main}
2018-06-20 14:53:42.212810+0800 WLZCyclycReference[4741:169494] 方法执行结束
复制代码

 

 

 

4、两个队列对应两个线程

"主队列"和"队列1" 对应 "主线程"和"新线程"

- (void)threadTest{
    dispatch_queue_t queue = dispatch_queue_create("队列1", DISPATCH_QUEUE_SERIAL);
    NSLog(@"我是任务2");
    [self getCurrentThread];
    //开启新线程
    dispatch_async(queue, ^{
        NSLog(@"我是任务1");//1️⃣
        [self getCurrentThread];
    });
    NSLog(@"方法执行结束");//2️⃣
    //1️⃣2️⃣的执行先后顺序是随机的
}
- (void)getCurrentThread{
    NSThread *currentThread = [NSThread currentThread];
    NSLog(@"currentThread == %@",currentThread);
}
复制代码
2018-06-20 15:11:12.132538+0800 WLZCyclycReference[5076:184244] 我是任务2
2018-06-20 15:11:12.132705+0800 WLZCyclycReference[5076:184244] currentThread == <NSThread: 0x60400007bd80>{number = 1, name = main}
2018-06-20 15:11:12.132809+0800 WLZCyclycReference[5076:184244] 方法执行结束
2018-06-20 15:11:12.132823+0800 WLZCyclycReference[5076:184332] 我是任务1
2018-06-20 15:11:12.133009+0800 WLZCyclycReference[5076:184332] currentThread == <NSThread: 0x6080002602c0>{number = 3, name = (null)}
复制代码

 

 

 

二、主线程特点讲解

主线程特点:如果主线程里有任务就必须等主线程任务执行完才轮到主队列(如果是其他队列的任务,那么任务就不用等待,会直接被主线程执行)的。所以说如果在主队列异步(开启新线程)执行任务无所谓,但是如果在主队列同步(不开启新线程,需要在主线程执行)执行任务会循环等待,造成死锁(但是在一般串行队列这样执行就不会出问题,一切都是因为主线程的这个特点)。

1、主线程特点演示

dispatch_queue_t mainQueue = dispatch_get_main_queue();
    dispatch_async(mainQueue, ^{
        NSLog(@"1");
        NSThread *mainThread = [NSThread currentThread];
        NSLog(@"currentThread == %@",mainQueue);
        sleep(3);
        NSLog(@"2");
    });
NSLog(@"主线程执行完了");
复制代码
2018-06-20 12:09:05.598367+0800 WLZCyclycReference[3254:101260] 主线程执行完了
2018-06-20 12:09:05.601950+0800 WLZCyclycReference[3254:101260] 1
2018-06-20 12:09:05.602095+0800 WLZCyclycReference[3254:101260] currentThread == <OS_dispatch_queue_main: com.apple.main-thread>
2018-06-20 12:09:08.603048+0800 WLZCyclycReference[3254:101260] 2
复制代码

从执行结果可以完美的看出主线程的特点,所以我严重怀疑:主队列的任务只能在主线程上执行,换句话说就是主队列是串行队列的阉割版,即主队列没有创建新线程的能力。

主线程在执行主队列任务的过程中:

  • 如果主队列通过异步的方式添加"任务1",那么既然主队列没有开新线程的能力,就等我主线程把我当前的任务执行完了,我主线程再去执行"任务1";
  • 如果主队列通过同步的方式添加"任务2",那么我主线程还是要先执行完我当前的任务,但是"任务2"是同步的,"任务2"又必须要主线程执行自己。那主线程只好循环等待然后死了。

2、主线程死锁演示,主线程产生死锁针对的是主队列

//主队列  同步执行任务  死锁
dispatch_sync(dispatch_get_main_queue(), ^{
});
复制代码

3、主线程中,同样的任务放到其它队列(串行、并行均可)同步执行,不会死锁,并且顺序执行,执行完“串行队列1”的任务,继续向下执行主队列的任务。

dispatch_queue_t queue = dispatch_queue_create("串行队列1", DISPATCH_QUEUE_SERIAL);
//串行队列  同步执行任务 因为没有开启线程所以还是主线程
dispatch_sync(queue, ^{
});
复制代码

上述代码中"主队列"、"串行队列1"两个队列的任务互不干扰,这种情况其实就相当于把两个队列放到了一个更大的虚拟并行队列中,可以同时执行任务

FIFO,串行队列任务1没有执行完,同步执行任务2的话绝逼死锁,但是死锁产生的原因是同一个队列里边的两个任务相互等待,如果不是同一个队列,那么久不会产生死锁。

4、同一个串行队列,同步执行任务嵌套,造成死锁。

dispatch_queue_t queue = dispatch_queue_create("串行队列", DISPATCH_QUEUE_SERIAL);
//串行队列  同步执行任务 因为没有开启线程所以还是主线程
dispatch_sync(queue, ^{
    NSLog(@"1");
    dispatch_sync(queue, ^{
        NSLog(@"串行队列嵌套执行");
    });
    NSLog(@"2");
});
复制代码

上边死锁的情况可以说明一个问题,某一个串行队列正在执行一个同步任务,这时候又在当前队列插入了一个同步任务就会造成死锁。这种情况就跟1(主队列有任务,主线程执行ing,主队列插入同步任务造成死锁)的情况是一样的,只不过主队列是系统自带的,我们这个队列是自己创建的而已。

同步异步:指的是函数(方法),能否开启新的线程。同步不能,异步可以

串行并行:指的是队列,任务的执行方式,串行指各个任务按顺序执行。并行指多个任务可以同时执行

串行队列也可以开启新的线程,只不过开启之后也只是按顺序执行,

三、概念解释

以下概念参考"08号疯子"的博客: IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

  • 进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间;

  • 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程。

  • 队列:dispatch_queue_t,一种先进先出的数据结构,线程的创建和回收不需要程序员操作,由队列负责。

  • 队列-串行队列:队列中的任务只会顺序执行

dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial);

  • 队列-并行队列:队列中的任务通常会并发执行

dispatch_queue_t q = dispatch_queue_create("......", dispatch_queue_concurrent);

  • 队列-全局队列:是系统开发的,直接拿过来(get)用就可以;与并行队列类似,但调试时,无法确认操作所在队列  

dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);

  • 队列-主队列:每一个应用程序对应唯一一个主队列,直接get即可;在多线程开发中,使用主队列更新UI

dispatch_queue_t q = dispatch_get_main_queue();

  • 串行队列同步:操作不会新建线程、操作顺序执行;

  • 串行队列异步:操作需要一个子线程,会新建线程、线程的创建和回收不需要程序员参与,操作顺序执行,是最安全的选择;

  • 并行队列同步:操作不会新建线程、操作顺序执行;

  • 并行队列异步:操作会新建多个线程(有多少任务,就开n个线程执行)、操作无序执行;队列前如果有其他任务,会等待前面的任务完成之后再执行;场景:既不影响主线程,又不需要顺序执行的操作

  • 全局队列同步:操作不会新建线程、操作顺序执行;

  • 全局队列异步:操作会新建多个线程、操作无序执行,队列前如果有其他任务,会等待前面的任务完成之后再执行;

  • 主局队列同步:如果把主线程中的操作看成一个大的block,那么除非主线程被用户杀掉,否则永远不会结束;主队列中添加的同步操作永远不会被执行,会死锁;

  • 主局队列异步:操作都应该在主线程上顺序执行的,不存在异步的;

1、队列和线程的区别:

队列:是管理线程的,相当于线程池,能管理线程什么时候执行。

队列分为串行队列和并行队列:

串行队列:队列中的线程按顺序执行(不会同时执行)

并行队列:队列中的线程会并发执行,可能会有一个疑问,队列不是先进先出吗,如果后面的任务执行完了,怎么出去的了。这里需要强调下,任务执行完毕了,不一定出队列。只有前面的任务执行完了,才会出队列。

2、主线程队列和gcd创建的队列也是有区别的。

主线程队列和gcd创建的队列是不同的。在gcd中创建的队列优先级没有主队列高,所以在gcd中的串行队列开启同步任务里面没有嵌套任务是不会阻塞主线程,只有一种可能导致死锁,就是串行队列里,嵌套开启任务,有可能会导致死锁。

主线程队列中不能开启同步,会阻塞主线程。只能开启异步任务,开启异步任务也不会开启新的线程,只是降低异步任务的优先级,让cpu空闲的时候才去调用。而同步任务,会抢占主线程的资源,会造成死锁。

3、线程:里面有非常多的任务(同步,异步)

同步与异步的区别:

同步任务优先级高,在线程中有执行顺序,不会开启新的线程。

异步任务优先级低,在线程中执行没有顺序,看cpu闲不闲。在主队列中不会开启新的线程,其他队列会开启新的线程。

4、主线程队列注意:

在主队列开启异步任务,不会开启新的线程而是依然在主线程中执行代码块中的代码。为什么不会阻塞线程?

主队列开启异步任务,虽然不会开启新的线程,但是他会把异步任务降低优先级,等闲着的时候,就会在主线程上执行异步任务。

在主队列开启同步任务,为什么会阻塞线程?

在主队列开启同步任务,因为主队列是串行队列,里面的线程是有顺序的,先执行完一个线程才执行下一个线程,而主队列始终就只有一个主线程,主线程是不会执行完毕的,因为他是无限循环的,除非关闭应用开发程序。因此在主线程开启一个同步任务,同步任务会想抢占执行的资源,而主线程任务一直在执行某些操作,不肯放手。两个的优先级都很高,最终导致死锁,阻塞线程了。

iOS-多线程编程学习之GCD——串行队列和并发队列(五) Grand Central Dispatch(GCD)有很多部分构成,例如有很好的语言特性,运行库,还提供了系统的、高效的方式来支持具有多核处理器的iOS和OS X设备进行并发事件处理。   BSD子系统,CoreFoundation和Cocoa APIs都已经使用这个增强特性来进行扩展了,因为它可以使得你的系统和应用运行的更快,更有效率,响应更及时。 阅读详情

相关推荐

慕课软件质量保证与测试(习题集)

慕课金陵科技学院.软件质量保证与测试.期末复习.习题汇总0 总目录1 绪论1.1 软件质量保证与测试的产生与发展1.2 软件缺陷,软件错误,软件故障1.3 软件质量保证与测试的意义,原则和挑战1.4 单元测试1.5 课后作业2 软件测试策略2.1 软件测试的模型,过程和生命周期2.2 软件测试的方法和技术2.3 单元测试2.4 课后作业3 黑盒测试3.1 黑盒测试概述3.2 等价类划分测试3.3 边界值测试3.4 错误推测法3.5 判定表驱动法3.6 因果图法3.7 场景法3.8 正交实验法3.9 单元测试

weixin_42473228的博客 5万+

iOS线程、同步异步、串行并行队列

线程与队列说不清道不明的关系: 线程是代码执行的路径,队列则是用于保存以及管理任务的,线程负责去队列中取任务进行执行。 我的理解:多个队列的任务可以在一条线程上执行,一个队列的任务也可以在多条线程上执行。个人理解,队列可以包含线程,线程也可以包含队列。 dispatch_sync:立马在当前线程执行任务,执行完再往下走,这句话就可以解释很多问题。 dispatch_async:不要求立马在当前线...

weixin_33971977的博客 348

高效管理Node.js版本与pnpm安装全攻略

本文提供了一套高效管理Node.js版本与pnpm安装的完整攻略。针对开发中常见的版本冲突和磁盘空间问题,详细介绍了如何在Windows和Ubuntu系统上安装并配置pnpm,并重点讲解了如何利用其内置的`pnpm env`命令进行Node.js版本管理,实现一站式环境管理,提升开发效率。

weixin_28840591的博客 313

如何理解线程和队列

如何理解线程和队列 什么是线程 线程定义: 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行,进程想要执行任务,必须且至少有一个线程 同步任务 : 同步意味着阻塞,会阻塞当前线程,直到把该任务执行完了才会继续执行其他的任务 异步任务: 异步就意味着该任务不会阻塞当前线程的执行情况,因为异步任务会被放在队列的最末端,最后执行。 同时异步表示该任务具备在新线程执行的能力,但是是否开启新线程,由系统决定,比如串行队列的情况,任务按顺序执行,开启新线程也是一种浪费,所以一般不会开启新线程。 什

weixin_39288983的博客 2060

手把手教你用TiggerRamDisk绕过iPhone/iPad激活锁(支持iOS16.3,Win/Mac双平台保姆级教程)

本文详细介绍了如何使用TiggerRamDisk工具绕过iPhone/iPad的激活锁,支持iOS16.3系统,并提供Windows和Mac双平台的保姆级教程。从工具准备、设备连接到核心解锁流程,一步步指导用户完成操作,帮助二手设备或旧设备重获新生。

weixin_29323493的博客 910

DRAM刷新refresh相关知识归类-基础小知识(三)

RAM每一位数据都是通过芯片内的一个小电容充电(或低电平)存储的。但随着时间的推移,电容逐渐失去电荷。为避免丢失存储的数据,必须定期刷新以将电荷(如果存在)恢复到其原始级别。此刷新过程包括读取每个位的值,然后将其写回。在此“刷新”期间,内存被占用,无法执行加载或存储位等正常操作。知道了应该这么做,但怎么去做以及有什么办法更有效率去做,就是接下来要整理的内容。

Paul 安的博客 1万+

2022年iOS最新面试(底层基础)问题答案

fafd

super_man_ww的博客 7134

码农新宠大对决:GitHub Copilot、通义灵码和CodeLlama谁主沉浮?

本文对三款主流AI编程工具GitHub Copilot、通义灵码和CodeLlama进行了全面对比分析。GitHub Copilot在多语言支持和代码质量上表现突出;通义灵码在中文理解和阿里云生态集成方面优势明显;CodeLlama则以开源可定制见长。文章从代码生成、理解能力、多语言支持、使用体验等维度展开评测,并结合实际案例说明不同开发者群体的适用选择。建议新手可优先考虑通义灵码,经验开发者适合GitHub Copilot,而有定制需求的企业团队则可选择CodeLlama。随着AI技术发展,这些工具将持续

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 675

iOS--多线程原理

线程是进程的基本执行单元,一个进程的所有任务都在线程中执行进程想要执行任务,必须得有线程,进程至少要有一条线程程序启动会默认开启一条线程,这条线程被成为主线程或UI线程队列,又称为伫列(queue),是先进先出的线性表,在具体应用中通常用链表或者数组来实现。装载线程任务的队形结构。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。

weixin_61196797的博客 470

面试问题总结——关于YOLO系列(三)

接着上篇的的YOLO系列面试问题总结,加油,冲! 三.YOLOv3 1.YOLOv3主干网络BackBone——Darknet-53网络结构(因为有53个卷积层) (原论文中Darknet53的尺寸是在图片分类训练集上训练的,所以输入的图像尺寸是256x256,而在YOLOv3中输入尺寸是416×416)   ①上图中,Top-1 Accuracy和Top-5 Accuracy是指什么呢?区别在哪呢?   我们知道ImageNet有大概1000个分类,而模型预测某张图片时,会给出1000个按概率从高.

boss-dog 1万+

人工智能训练师(三级)操作技能考核·自测卷

为您定制了一份。这份试卷严格拆分了“业务分析”、“智能训练”、“智能系统设计”、“培训与指导”四大模块,所有填空题均来源于上一轮整理的。您可以先用它进行“第二步(抛开答案自己填)”,填完后对照末尾的答案速查进行“第一步(补全并运行)”的校验,最后标记错题进行“第三步(针对性重复练习)”。

suny8088的博客 103

ios线程和GCD和队列同步异步的关系

1、什么是进程?   进程是指在系统中正在运行的一个应用程序。比如同时打开QQ、Xcode,系统就会分别启动2个进程。截图    2、什么是线程?   1)、一个进程要想执行任务,必须得有线程(每一个进程至少要有一条线程)   2)、线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行   3)、一个线程中任务的执行是串行的。即如果要在1个线程中执行多个任务,那么只能一个...

weixin_30657999的博客 252

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

死锁及线程与队列之间的等待关系

上面这几个例子可以很好的帮助理解线程队列以及任务同步和异步之间的关系,不必去死记这几这者间排列组合的结果;

m0_74217598的博客 1402

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【iOS】多线程原理

本文系统梳理了iOS多线程编程的核心概念与实现方式。主要内容包括:1. 基础概念:线程与进程的区别,线程与RunLoop的关系,影响任务执行速度的因素;2. 线程安全:互斥锁与自旋锁的对比及应用场景;3. 实现方式:详细解析了NSThread、GCD和NSOperation三大技术,重点对比了GCD与NSOperation的优缺点;4. GCD深入:函数与队列的不同组合(串行/并发队列+同步/异步派发)、栅栏函数、信号量等高级用法;5. NSOperation特性:任务依赖、优先级设置和并发控制等。文章强调

2301_80095702的博客 1324

【iOS】多线程 & 锁问题总结

iOS 锁和多线程的总结。

weixin_61639290的博客 2358

iOS之深入探究多线程实现、线程安全和线程死锁

一、线程与进程 ① 线程与进程的定义 线程 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行; 进程要想执行任务,必须得有线程,进程至少要有一条线程; 程序启动会默认开启一条线程,这条线程被称为主线程或者 UI 线程。 进程 进程是指在系统中正在运行的一个应用程序; 每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内; 通过“活动监视器”可以查看 mac 系统中所开启的线程。 ② 线程与进程的关系 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的

╰つ栺尖篴夢ゞ 1万+

iOS 多线程知识梳理

iOS 多线程知识梳理 一、进程和线程 1、进程:是一个具有一定独立功能的程序关于某次数据集合的一次运动活动,它是操作系统分配资源的基本单元;是指在系统中正在运行的一个程序,一段程序执行的过程,可以理解为手机上的一个app;进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内,拥有独立运行的全部资源。 2、线程:程序执行流的最小单元,线程是进程中的一个实体;一个进程要想执行任务,必须至少有一条线程,应用程序启动的时候,系统会默认开启一条线程,也就是主线程。 进程和线程的关系:线程是进程的执行单元,

掰湘果的博客 357

iOS开发多线程总结

进程是计算机中已运行程序的实体,是线程的容器。每个进程之间是相互独立的,每个进程均运行在其专用且受保护的内存空间内。把工厂作为一个系统,进程类似于车间。

liuxinzhongliubin的博客 1410

iOS线程与进程

1、线程与进程的区别和联系?  进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进 程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的

super_ZJ_iOS的博客 594

iOS多线程并发,串行,同步,异步

好久没写过博客,回顾之前还是编程初期的那几篇,不想多年之后在iOS圈子里悄悄的来,又悄悄的走.所以又捡起博客,以后会定期分享自己的学习心得.           废话不多说,上今天的菜           我们先讲几个概念,也是面试会经常问到的. 同步线程:同步线程会阻塞当前线程去执行线程内的任务,执行完之后才会反回当前线程。异步线程:异步线程不会阻塞当前线程,会开启其他线程去执行线

wyk2021的博客 532

c语言线程任务队列,进程、线程、任务、队列

一、 进程1.进程是操作系统分配资源的基本单元,是一个具有一定独立功能的程序关于某次数据集合的一次运行活动.2.进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,我们可以理解为手机上的一个app.3.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内,拥有独立运行所需的全部资源二、 线程1.线程是程序执行流的最小单元,是进程中的一个实体.2.一个进程要想执行任务,必须至...

weixin_42346710的博客 1281

【iOS】多线程基础

本文介绍了iOS多线程编程的基础知识。主要内容包括: 进程与线程的概念区别: 进程是资源分配的最小单位,线程是程序执行的最小单位 线程共享进程资源,切换开销更小 多线程原理: 单核CPU通过快速切换线程实现"同时执行"效果 影响执行速度的因素包括CPU调度、任务复杂度等 线程的生命周期: 新建-就绪-运行-阻塞-死亡五个阶段 介绍了线程的exit和cancel方法 线程安全: 对比了互斥锁和自旋锁的特点 分析了atomic原子属性的实现原理 线程间通信方式 NSOperation的基本使

2301_79847748的博客 1479

iOS线程术语

进程、线程、任务//进程(process),指的是一个正在运行中的可执行文件。每一个进程都拥有独立的虚拟内存空间和系统资源,包括端口权限等,且至少包含一个主线程和任意数量的辅助线程。另外,当一个进程的主线程退出时,这个进程就结束了;//线程(thread),指的是一个独立的代码执行路径,也就是说线程是代码执行路径的最小分支。在 iOS 中,线程的底层实现是基于 POSIX threads API 的

iChenfy的专栏 302

iOS线程池

多线程开发是一件需要特别精心的事情,即使是对有多年开发经验的工程师来说。  为了能让初级开发工程师也能使用多线程,同时还要简化复杂性。各种编程工具提供了各自的办法。对于iOS来说,建议在尽可能的情况下避免直接操作线程,使用比如NSOperationQueue这样的机制。  可以把NSOperationQueue看作一个线程池,可往线程池中添加操作(NSOperation)到队列中。线程

pilqc2009的专栏 714
上一篇: 智能家居设备连接路由的技术AirKiss
下一篇: CALayer的modellayer和presentionlayer的区别
敬业的程序猿
博客等级 码龄11年 51粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值