多线程笔记
2015-11-21 19:16
197 查看
–GCD
基本思想
GCD有5个不同的队列:运行在主线程中的主队列、3个优先级不同的后台队列、1个优先级更低的后台队列。
自定义队列:并行队列 和 串行队列。在自定义队列中,被调度的所有block最终都将被放入到系统的全局队列和线程池中。
串行、同步
串行、异步
并行、同步
并行、异步
在开发中,要永远使用DISPATCH_QUEUE_PRIORITY_DEFAULT。
串行队列、异步任务是最安全的一个多线程选择。
任务嵌套时,同步任务中包含同步任务,会导致阻塞。
—-NSOperation & NSOperationQueue
从本质上看,操作队列的性能比GCD略低,不过大多数情况下这种负面影响可以忽略不计。操作队列是并发编程的首选。
(实际开发中,由于习惯的原因,一般都使用GCD而不是操作队列。)
-—多线程bloc中的self
只有self直接强引用block,才会出现循环引用。
block的管理 及 线程的创建和销毁都是个有队列负责的,直接在block中使用self是可以的。
-—多线程中的资源共享
互斥锁(@synchronized):性能消耗非常大,苹果官方不建议使用。
在实际开发中,尽量不要抢夺资源。
处于性能的考虑,UIKit中的大部分类是线程不安全的,因此,苹果官方要求,所有更新UI的操作都在主线程中执行。
基本思想
GCD有5个不同的队列:运行在主线程中的主队列、3个优先级不同的后台队列、1个优先级更低的后台队列。
自定义队列:并行队列 和 串行队列。在自定义队列中,被调度的所有block最终都将被放入到系统的全局队列和线程池中。
串行、同步
串行、异步
并行、同步
并行、异步
在开发中,要永远使用DISPATCH_QUEUE_PRIORITY_DEFAULT。
串行队列、异步任务是最安全的一个多线程选择。
任务嵌套时,同步任务中包含同步任务,会导致阻塞。
—-NSOperation & NSOperationQueue
从本质上看,操作队列的性能比GCD略低,不过大多数情况下这种负面影响可以忽略不计。操作队列是并发编程的首选。
(实际开发中,由于习惯的原因,一般都使用GCD而不是操作队列。)
-—多线程bloc中的self
只有self直接强引用block,才会出现循环引用。
block的管理 及 线程的创建和销毁都是个有队列负责的,直接在block中使用self是可以的。
-—多线程中的资源共享
互斥锁(@synchronized):性能消耗非常大,苹果官方不建议使用。
在实际开发中,尽量不要抢夺资源。
处于性能的考虑,UIKit中的大部分类是线程不安全的,因此,苹果官方要求,所有更新UI的操作都在主线程中执行。
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- C#实现多线程的同步方法实例分析
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法
- C#控制台下测试多线程的方法
- Ruby 多线程的潜力和弱点分析
- C#中WPF使用多线程调用窗体组件的方法
- C#如何对多线程、多任务管理(demo)
- C#实现多线程的Web代理服务器实例
- c#实现多线程局域网聊天系统
- PHP使用CURL实现多线程抓取网页
- 浅解关于C#多线程的介绍