iOS开发多线程介绍
来源:互联网 发布:excel同一列重复数据 编辑:程序博客网 时间:2024/05/22 02:21
参考文章:http://www.jianshu.com/p/95aa5446361d
http://www.cnblogs.com/wendingding/tag/多线程篇/
若有不对的地方,还请指教,本文只做借鉴。
基础知识:
- 串行:一次只能执行一个任务,前面的任务完成才能执行后面的任务,按照顺序执行。
- 并行:CPU的多核芯同时执行多个任务,真正的同时执行任务。
- 并发:单核CPU在多个任务间进行切换,做到“同时”执行任务,并不是真正的同时执行任务。
- 同步(sync):同步请求一旦发送,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作(例如登录验证);发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。注意这个返回是指CUP返回执行的数据段部分,所以目前来看只是阻塞了CPU的数据段部分 并不耽误CPU干别的 所以即使是同步也不见得是阻塞模式
- 异步(async):异步请求不会阻塞主线程,会建立一个新的线程来操作,发出异步请求后,依然可以对UI进行操作,程序可以继续运行;*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用
- 同步和异步描述的其实就是函数什么时候返回,比如用来下载图片的函数A: {download image},同步函数只有在image下载结束之后才返回,下载的这段时间函数A只能搬个小板凳在那儿坐等...而异步函数,立即返回.图片会去下载,但函数A不会去等它完成. So,异步函数不会堵塞当前线程去执行下一个函数!
多线程:
进程:
进程是指在系统中正在运行的一段程序;
每个进程是相互独立的,每个进程均运行在其专用且受保护的内存空间内;
一个进程crash,对其它进程不会造成影响。
线程:
一个进程想要运行,必须要有线程,至少要有一个线程;
一个进程内的任务都是在线程中运行;
一个线程crash,其所在的进程也会随之crash;
当一个应用运行的时候,系统会默认帮我们开辟一条线程,也叫做‘主线程’。
什么是多线程:一个进程可以开启多条线程,每个线程可以同时执行不同的任务。
多线程原理:
同一时间,一个单核CPU只能处理1条线程,只有1条线程在工作(执行)
多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)
如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
如果是多核CPU,即可同时执行多个任务,实现真正的并行。
多线程实际应用:
使用单例模式时,可以使用GCD;
耗时操作放入子线程处理,完成后回主线程显示;
从数据库读取大量数据,可开辟子线程操作;
处理音频、视频数据时,在子线程处理;
数据同步操作,如百度云,可在子线程进入后台后开始同步
多线程优缺点:
优点:能提高程序的执行效率;能适当提高资源利用率(CPU、内存利用率)
缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
线程越多,CPU在调度线程上的开销就越大
程序设计更加复杂:比如线程之间的通信、多线程的数据共享
关于多线程的创建与使用,将在后期博客更新!
阅读全文
0 0
- iOS开发多线程介绍
- iOS开发多线程-GCD介绍
- iOS开发-多线程简单介绍
- iOS开发多线程-多线程简单介绍
- IOS开发多线程 - 多线程的简单介绍
- iOS开发 多线程原理与runloop介绍
- iOS开发多线程篇—GCD介绍
- iOS开发多线程篇—GCD介绍
- iOS开发多线程篇—GCD介绍
- IOS开发—多线程之NSOperation介绍
- iOS开发多线程篇—GCD介绍
- iOS开发多线程篇—GCD介绍
- iOS开发多线程—05GCD介绍
- iOS开发多线程篇—GCD介绍
- iOS开发多线程篇—GCD介绍
- iOS开发多线程篇—GCD介绍
- iOS开发多线程篇—GCD介绍
- iOS开发之多线程--多线程简单介绍
- HDU 2045 不容易系列之(3)—— LELE的RPG难题
- 用java实现的经典递归算法
- 什么是:android-adt;sdk;api;adb
- Eclipse下如何打开Servers窗口
- java基础知识总结。
- iOS开发多线程介绍
- cmd命令行
- springboot+Junit测试rest接口,报错显示url无法连接
- ECharts 多个折线图动态获取json数据
- LeetCode 34. Search for a Range (Python)
- 【HDU-1878】 欧拉回路
- Android textview文字两端对齐,中间空白
- 详述undefined和null的区别
- linux c下目录文件的操作(opendir,readdir,closedir)