美文网首页
OC中的多线程与队列

OC中的多线程与队列

作者: 鹏雨燕 | 来源:发表于2017-06-17 14:57 被阅读507次

进程

一个app启动是一个进程,每个进程都有自己独立的虚拟内存空间

线程

线程是进程中的一个独立执行路径,一个进程至少有一个线程,即主线程

队列

1.串行队列(Serial)

你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。每个队列中的任务运行在一个由各自串行队列维护的独立线程上,一个队列中只有一个线程。

3.并行队列(Concurrent)

并行队列是不允许自己创建的,系统中存在三个不同优先级的并行队列。并行队列依旧按照任务添加的顺序启动任务,但是,后一个任务无须等待前一个任务执行完毕,而是启动第一个任务后,立即启动下一个任务。至于同一时刻允许同时运行多少个任务由系统决定。任务各自运行在并行队列为他们提供的独立线程上,并行队列中同时运行多少个任务,就必须维护多少个线程。

4.主线程队列(dispatch_get_main_queue)

主调度队列中的任务运行在应用程序主线程上,所以,如果你要修改应用程序的界面,他是唯一的选择

5、全局队列(dispatch_get_global_queue)

(苹果为了方便多线程的设计,提供一个全局队列,供所有的APP共同使用)

队列的任务处理

1、串行队列(✅DISPATCH_QUEUE_SERIAL)的同步任务和异步任务:dispatch_sync 和 dispatch_async


#串行同步执行结果:不会创建新线程,按照 顺序执行

#串行异步执行结果:创建了一个新线程,但是依然按照 顺序执行

#串行先执行异步,再执行同步的结果:发现同步一直是在主线程,但也是先让异步的执行完再来执行同步的,

从而说明一个串行队列是顺序执行的,但是也不影响主线程的操作

2、并行队列(✅DISPATCH_QUEUE_CONCURRENT)的同步任务和异步任务:dispatch_sync 和 dispatch_async

#并行同步执行结果:不会创建新线程,按照 顺序执行[同串行同步]

#并行异步执行结果:会新建多个线程、操作无序执行(有⽤,容易出错!)队列前如果有其他任务,会等待前面的任务完成之后再执⾏

场景:既不影响主线程,又不需要顺序执⾏行的操作!

#并行先执行同步,再执行异步的结果:发现同步执行完才会执行异步

#并行先执行异步,再执行同步的结果:顺序已经完全各种乱入了!

3、全局队列(DISPATCH_QUEUE_PRIORITY_DEFAULT):开发中用这个就对了dispatch_get_global_queue

#全局队列先执行同步,再执行异步的结果:实际上结果是和并列的都一样的效果

4、主线程队列:dispatch_get_main_queue[主队列中添加的同步操作永远不会被执⾏行,会死锁]

四、嵌套同步任务

1、在串行队列中嵌套多一个同步任务,会造成阻塞!!

五、小结一下

1、并行和串行的任务调度的区别

相关文章

  • 专题规划

    OC与JS 中数据类型 的比较 OC与JS 中多线程 的实现,异步的实现,串行与并行,队列的概念

  • NSOperation简单使用

    NSOperation是OC中多线程技术的一种,是对GCD的OC包装.它包含队列(NSOperationQueue...

  • 认识和使用NSOperation

    NSOperation是OC中多线程技术的一种,是对GCD的OC包装.它包含队列(NSOperationQueue...

  • OC中的多线程与队列

    进程 一个app启动是一个进程,每个进程都有自己独立的虚拟内存空间 线程 线程是进程中的一个独立执行路径,一个进程...

  • 队列和线程

    [iOS多线程中,队列和执行的排列组合结果分析] 多线程中的队列有:串行队列,并发队列,全局队列,主队列。 执行的...

  • iOS 多线程技术总结

    概览 进程与线程的概念 多线程的由来 并行与并发 多线程的实现 串行与并行 线程的几种状态 串行队列与并发队列区别...

  • iOS多线程

    OC中的多线程 OC中多线程根据封装程度可以分为三个:NSThread、GCD和NSOperation,本文主要讲...

  • iOS多线程编程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

  • iOS多线程编程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

  • IOS知识总结——多线程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

网友评论

      本文标题:OC中的多线程与队列

      本文链接:https://www.haomeiwen.com/subject/dcfrrttx.html