多任务最基本的形式就是运行循环,运行循环可以理解为一个大的do/while循环,它运行在某个线程中,从各种事件队列中取得一个事件(每次一个),然后把它分派给合适的监听器
通常项目中引入少量长期线程来处理网络请求、数据库操作、计算,这意味着加锁
,加锁代价昂贵,并且可能导致大量bug。如果创建短期线程,虽然对锁的需求降低了,但是创建线程成本很高,我们需要管理一个线程池
。操作一般有依赖关系,所以我们期望有队列
,如果能让 操作系统来处理线程池和队列 就更好了,这就是 NSOperation。你不用操心信号量和互斥锁机制。GCD 常用栅栏、调度组。
分派队列是严格的先进先出结构,如果要在队列中使用优先级或者调整块的顺序,必须使用NSOperation。
分派队列就是队列,队列不是线程,队列也不接受块,队列组织块。dispatch_async不会让块运行,只是将块 添加 到队列中
高优先级队列插队
//
dispatch_queue_t low = dispatch_queue_create("low", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t high = dispatch_queue_create("high", DISPATCH_QUEUE_SERIAL);
dispatch_set_target_queue(low, high);
dispatch_async(low, ^{
NSLog(@"低优先级区块%ld",(long)self.time);
});
dispatch_suspend(low);
dispatch_async(high, ^{
NSLog(@"高优先级区域%ld",(long)self.time);
dispatch_resume(low);
});
网友评论