iOS开发多线程介绍

来源:互联网 发布:excel同一列重复数据 编辑:程序博客网 时间:2024/05/22 02:21

参考文章:http://www.jianshu.com/p/95aa5446361d

              http://www.cnblogs.com/wendingding/tag/多线程篇/

若有不对的地方,还请指教,本文只做借鉴。

基础知识:

  1.  串行:一次只能执行一个任务,前面的任务完成才能执行后面的任务,按照顺序执行。
  2.  并行:CPU的多核芯同时执行多个任务,真正的同时执行任务。
  3.  并发:单核CPU在多个任务间进行切换,做到“同时”执行任务,并不是真正的同时执行任务。
  4.  同步(sync):同步请求一旦发送,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作(例如登录验证);发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。注意这个返回是指CUP返回执行的数据段部分,所以目前来看只是阻塞了CPU的数据段部分 并不耽误CPU干别的 所以即使是同步也不见得是阻塞模式
  5.  异步(async):异步请求不会阻塞主线程,会建立一个新的线程来操作,发出异步请求后,依然可以对UI进行操作,程序可以继续运行;*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用
  6.  同步和异步描述的其实就是函数什么时候返回,比如用来下载图片的函数A: {download image},同步函数只有在image下载结束之后才返回,下载的这段时间函数A只能搬个小板凳在那儿坐等...而异步函数,立即返回.图片会去下载,但函数A不会去等它完成. So,异步函数不会堵塞当前线程去执行下一个函数!  

多线程: 


进程:

进程是指在系统中正在运行的一段程序;
每个进程是相互独立的,每个进程均运行在其专用且受保护的内存空间内;
一个进程crash,对其它进程不会造成影响。

线程:

一个进程想要运行,必须要有线程,至少要有一个线程;
一个进程内的任务都是在线程中运行;
一个线程crash,其所在的进程也会随之crash;
当一个应用运行的时候,系统会默认帮我们开辟一条线程,也叫做‘主线程’。


什么是多线程:一个进程可以开启多条线程,每个线程可以同时执行不同的任务。

多线程原理:

同一时间,一个单核CPU只能处理1条线程,只有1条线程在工作(执行)

多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)

如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象

如果是多核CPU,即可同时执行多个任务,实现真正的并行。


多线程实际应用:


使用单例模式时,可以使用GCD;

耗时操作放入子线程处理,完成后回主线程显示;

从数据库读取大量数据,可开辟子线程操作;

处理音频、视频数据时,在子线程处理;

数据同步操作,如百度云,可在子线程进入后台后开始同步


多线程优缺点:


优点:能提高程序的执行效率;能适当提高资源利用率(CPU、内存利用率)


缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能

线程越多,CPU在调度线程上的开销就越大

程序设计更加复杂:比如线程之间的通信、多线程的数据共享



关于多线程的创建与使用,将在后期博客更新!


原创粉丝点击