1.GCD:开发者可以自定义队列:串行或并行队列。在自定义队列中被调度的所有block最终都将被放入到系统的全局队列中和线程池中。
2.NSOperation:可以通过重写main或start方法来定义自己的operations。前者不需要开发者管理一些状态属性。后者必须手动管理操作的状态。为了让操作队列能够捕获到操作的改变,需要讲状态的属性以配合KVO的方式进行实现。
操作队列的性能比GCD要低一点,不过大多数情况这点负面影响可以忽略不计。
3.Run Loop直接配合任务的执行,它提供了一种异步执行代码的机制。Run Loop可以运行在不同的模式,每种模式都定义了一组事件,供Run Loop作出响应。
4.除了确保互斥访问,还需要引入内存屏障,解决代码无序执行所带来的问题
5.优先级反转:高优先级和低优先级的任务之间共享资源时,就有可能发生优先级反转。当低优先级的任务获得了共享资源的锁时,该任务应该迅速完成并释放掉锁,这样高优先级的任务就可以在没有明显延时的情况下继续执行。然而高优先级任务会在低优先级的任务持有锁的期间被阻塞。如果这时候有一个中优先级的任务(该任务不需要那个共享资源),那么它就有可能会抢占低优先级任务而被执行,因为此时高优先级是被阻塞的,所以中优先级任务时目前所有可运行任务重优先级最高的。此时中优先级就会阻塞低优先级任务,倒置低优先级任务不能释放掉锁,这也就会引起高优先级任务一直在等待锁的释放。
6安全模式:从主线程中提取要使用到的数据,并利用一个操作队列在后台处理相关的数据,最后回到主队列中来发送你在后台队列中得到的结果。
网友评论