ios开发-多线程
来源:互联网 发布:算法设计 答案 编辑:程序博客网 时间:2024/06/12 01:47
创建线程目的是为了开启一条新的执行路径,运行指定代码与主线程中的代码实现同时运行。
多线程优势:
(1)充分发挥多核处理器优势,讲不通现成分配给不同的处理器,真正进入“并行运算”状态;
(2)将耗时的任务分配给其他线程执行,由主线程负责统一更新界面会使应用流畅,用户体验更好;
多线程弊端:
(1)新建线程会消耗内存空间和cpu时间,县城太多会降低系统运行性能;
多线程误区:
(1)多线程是为了并发执行多项任务,不会提高单个算法本身的效率;
进程是什么?
(1)正在进行中的程序被称为进程,负责程序运行的内存分配
(2)每一个进程都有自己独立的虚拟内存空间
线程是什么?
(1)线程是进程中一个独立的执行路径(控制单元)
(2)一个进程中至少包括一条线程,即主线程
(3)可以将耗时的执行路径放在其他线程中执行,比如网络请求
三种多线程
第一种是GCD
(1)基于C语言的底层API
(2)用block定义任务,使用起来非常灵活便捷
(3)提供了更多的控制能力以及操作队列中所不能使用的底层函数
基本思想:用操作(block)放在队列中去执行
(1)操作用block定义
(2)队列负责调度任务执行所在的线程,以及具体的执行时间
(3)队列特点先进先出(FIFO)的,新添加之队列的操作都会在队尾。
GCD的函数都是以dispatch开头的。
GCD有四种类别的队列:
(1)并行队列
特点:没有队形,执行顺序不能控制
应用场景:并大执行任务,没有先后顺序
缺点:(1)不能控制执行顺序;(2)不能控制线程数量;创建n个线程
并行队列的同步任务,穿插运行,不需要创建线程
(2)串行队列
特点:依次执行
串行队列的同步任务,会在主线程上运行
异步任务,会并发执行,但是在串行队列中,任然会一次顺序执行
(3)全局队列
特点:与并行队列的区别是,不需要创建,执行效果相同。全局队列没有名称,调试时无法确认准确队形
(4)主线程队列
特点:(1)保证在主线程上执行;(2)异步任务,主线程上运行,会保持队列;(3)同步任务,阻塞(因为要等主线程被杀掉,但是一般主线程是不会被杀掉的)
线程的回收:
线程的回收室友队列负责的
下面是不同队列中嵌套dispatch_sync(同步任务)的结果:
(1)全局队列,都在主线程上执行,不会死锁
(2)并行队列,都在主线程上执行,不会死锁
(3)串行队列,会死锁,但是会执行同步操作之前的代码
(4)主线程队列。直接死锁
第二种是NSOperation,NSOperationQueue
(1)NSOperationQueue(操作队列)由GCD提供的队列模型是一套oc的API
(2)GCD提供更底层的控制,NSOperationQueue则是在GCD之上实现了一些方便的功能,更安全
(3)分成良种不同类型的队列:主队列和自定义队列
1.主队列运行在主线程上
2.自定义队列在后台执行
3.队列处理的任务是NSOperation的子类:(1)NSInvocationOperation;(2)NSBlockOperation。
(4)setMaxConcurrentOperationCount:
设置同事并发的线程数量,能够有效降低CPU和内存的开销(GCD不容易实现)
第三种是NSThread
- iOS-----IOS多线程开发
- IOS多线程开发
- IOS多线程开发
- iOS多线程开发 NSThread
- iOS多线程开发指南
- IOS开发 多线程 一
- IOS多线程开发
- ios 开发中的多线程
- ios 开发中的多线程
- iOS多线程开发 NSThread
- IOS多线程开发
- iOS开发 多线程GCD
- iOS多线程开发
- iOS多线程开发
- iOS开发中的多线程
- iOS多线程/并行开发
- ios开发-多线程
- IOS开发:多线程基础
- String s = new String(abc);创建了几个String对象?
- vi使用手册
- HDU1690---Bus System
- poj1018
- hdu1004 Let the Balloon Rise (字符串)
- ios开发-多线程
- 四种垃圾回收器的比较
- PHP算法之插入排序
- Django项目实践3 - Django模型(字段、数据库操作及模型继承)
- 用归并排序实现单链表的排序
- inputStream的read用法
- 这个夏天:应用试客已将积分墙逼到墙角,ASO路上的那些掮客
- opencv从摄像头读取视频并实时进行人脸检测代码
- 【C++总结】C++的域运算符'::'