iOS多线程编程(一)------ 基本概念
2016-08-23 20:11
295 查看
最近写了一些多线程编程的demo,写了demo,容易忘记,一些概念都写在备忘录了,趁今晚没事,就整理出来,以便以后自己查阅。
一、概述
在开发过程中,最烦的就是等待时间很长,比如开发过程中,编译器突然卡了,什么也操作不了,只能等待,这个时候是最揪心的。又不能强制关了,怕有些数据没有保存。
在用户使用我们的开发的应用的时候,也一样,尽量让用户减少等待时间,尽可能快的完成运算。
二、什么是多线程
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常有操作系统负责多个线程的调度和执行。(来源百度百科)
一个程序至少有一个进程,一个进程至少有一个线程(主线程)
三、几个的概念的理解
1、串行(Serial) VS 并行 (Concurrent)
串行和并行描述的是任务和任务之间的执行方式。串行是任务A执行完了任务B才能执行,它们俩只能顺序执行,并行则是任务A和任务B可以同时执行。
2、同步(Synchronous) VS 异步(Asynchronous)
同步和异步描述的其实就是函数什么时候返回,比如用来下载图片的函数A:{download image},同步函数只有在image下载结束之后才返回,下载的这段时间函数A只能那边等待…而异步函数,立即返回,图片会去下载,但函数A不会去等它完成。异步函数不会堵塞当前线程去执行下一个函数。
3、并发(Concurrency) VS 并行(Parallelism)
并行和并发都是用来让不同的任务可以“同时执行”,只是并发是伪同时,而并行是真同时,假设你有任务T1和任务T2(这里的任务可以是进程也可以是线程)
a.首页如果你的CPU是单核的,为了实现“同时”执行T1和T2,那只能分时执行,CPU执行一会儿T1后马上再去执行T2,切换的速度非常快(这个的切换也是需要消耗资源的),以至于你以为T1和T2是同时执行了(但其实同一时刻只有一个任务占有着CPU)
b.如果你是多核CPU,那么就可以真正同时执行了T1和T2任务,在同一时刻CPU的核心core执行着T1,然后core2执行着T2。
大体来说:
并发的关键是你有处理多个任务的能力,不一定要同时
并行的关键是你有同时处理多个任务的能力
关键点就是:是否是[同时]
最后打个比方:并发,就像一个人(cpu)喂两个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。并行,就是2个人喂两个孩子,两个孩子也同时在吃饭。
四、为何使用多线程
每个iOS应用程序都有个专门用来更新显示UI界面、处理用户的触摸事件的主线程,因此不能将其他太耗时的操作(比如下载图片,视频等)放在主线程中执行,不然会操作主线程堵塞(出现卡机现象),带来极坏的用户体验。一般的解决方案就是将耗时的操作(如下载图片,视频等)放到另外一个线程中去执行,多线程编程是防止线程堵塞,增加运行效率的最佳方法。
五、iOS多线程常用方法
1、Thread 是三种方法里面相对轻量级的,但需要管理线程的生命周期,同步、加锁问题,这会导致一定的性能开销
2、Cocoa Operation 是基于OC实现的,NSOperation以面向对象的方式封装了需要执行的操作,不必关心线程管理,同步等问题。NSOperation是一个抽象基类,iOS提供了两种默认实现:NSInvocationOperation和NSBlockOperation,当然也可以自定义NSOperation。
3、Grand Central Dispatch(简称CGD,iOS4才开始支持)提供了一些新特性,运行库来支持多核运行并行编程,它的关注点更高,如果在多个cpu上提示效率。
注:下面几篇文章会详解讲解iOS多线程的常用方法。
如有不对之处还往评论指出,谢谢
参考链接 http://www.cocoachina.com/game/20151201/14517.html
一、概述
在开发过程中,最烦的就是等待时间很长,比如开发过程中,编译器突然卡了,什么也操作不了,只能等待,这个时候是最揪心的。又不能强制关了,怕有些数据没有保存。
在用户使用我们的开发的应用的时候,也一样,尽量让用户减少等待时间,尽可能快的完成运算。
二、什么是多线程
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常有操作系统负责多个线程的调度和执行。(来源百度百科)
一个程序至少有一个进程,一个进程至少有一个线程(主线程)
三、几个的概念的理解
1、串行(Serial) VS 并行 (Concurrent)
串行和并行描述的是任务和任务之间的执行方式。串行是任务A执行完了任务B才能执行,它们俩只能顺序执行,并行则是任务A和任务B可以同时执行。
2、同步(Synchronous) VS 异步(Asynchronous)
同步和异步描述的其实就是函数什么时候返回,比如用来下载图片的函数A:{download image},同步函数只有在image下载结束之后才返回,下载的这段时间函数A只能那边等待…而异步函数,立即返回,图片会去下载,但函数A不会去等它完成。异步函数不会堵塞当前线程去执行下一个函数。
3、并发(Concurrency) VS 并行(Parallelism)
并行和并发都是用来让不同的任务可以“同时执行”,只是并发是伪同时,而并行是真同时,假设你有任务T1和任务T2(这里的任务可以是进程也可以是线程)
a.首页如果你的CPU是单核的,为了实现“同时”执行T1和T2,那只能分时执行,CPU执行一会儿T1后马上再去执行T2,切换的速度非常快(这个的切换也是需要消耗资源的),以至于你以为T1和T2是同时执行了(但其实同一时刻只有一个任务占有着CPU)
b.如果你是多核CPU,那么就可以真正同时执行了T1和T2任务,在同一时刻CPU的核心core执行着T1,然后core2执行着T2。
从github上看的一张图
大体来说:
并发的关键是你有处理多个任务的能力,不一定要同时
并行的关键是你有同时处理多个任务的能力
关键点就是:是否是[同时]
最后打个比方:并发,就像一个人(cpu)喂两个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。并行,就是2个人喂两个孩子,两个孩子也同时在吃饭。
四、为何使用多线程
每个iOS应用程序都有个专门用来更新显示UI界面、处理用户的触摸事件的主线程,因此不能将其他太耗时的操作(比如下载图片,视频等)放在主线程中执行,不然会操作主线程堵塞(出现卡机现象),带来极坏的用户体验。一般的解决方案就是将耗时的操作(如下载图片,视频等)放到另外一个线程中去执行,多线程编程是防止线程堵塞,增加运行效率的最佳方法。
五、iOS多线程常用方法
1、Thread 是三种方法里面相对轻量级的,但需要管理线程的生命周期,同步、加锁问题,这会导致一定的性能开销
2、Cocoa Operation 是基于OC实现的,NSOperation以面向对象的方式封装了需要执行的操作,不必关心线程管理,同步等问题。NSOperation是一个抽象基类,iOS提供了两种默认实现:NSInvocationOperation和NSBlockOperation,当然也可以自定义NSOperation。
3、Grand Central Dispatch(简称CGD,iOS4才开始支持)提供了一些新特性,运行库来支持多核运行并行编程,它的关注点更高,如果在多个cpu上提示效率。
注:下面几篇文章会详解讲解iOS多线程的常用方法。
如有不对之处还往评论指出,谢谢
参考链接 http://www.cocoachina.com/game/20151201/14517.html
相关文章推荐
- iOS多线程编程(一)——RunLoop基本概念
- ArcGIS for iOS 开发系列(1) – 基本概念
- 5.2 iOS开发视频教程—延展的基本概念和用法
- IOS学习笔记(七)之UISegmentedControl分段控件的基本概念和使用方法
- iOS 面试题:OC基本概念题<续>
- IOS学习笔记(十)之UIImageView图片视图的基本概念和使用方法
- IOS开发基本概念
- IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法
- IOS学习笔记(七)之UISegmentedControl分段控件的基本概念和使用方法
- iOS证书相关的基本概念
- iOS开发视频教程—6.1引用技术的基本概念和用法
- iOS学习笔记10(1)—GCD介绍(一): 基本概念和Dispatch Queue
- 【无限互联】iOS开发视频教程— 3.1 面向对象的基本概念之类和对象
- IOS学习笔记(八)之UIActivityIndicatorView(活动指示器视图)的基本概念和使用方法
- iOS面试攻略下篇:Objective-C面试题和基本概念(1)
- 5.1iOS开发视频教程— 类目的基本概念和用法
- iOS开发视频教程—6.2对象所有权的基本概念和用法
- IOS ARC和垃圾回收机制 基本概念
- IOS学习笔记(十)之UIImageView图片视图的基本概念和使用方法
- iOS 面试题:OC基本概念题