1.NSThread
相关知识
2.GCD
相关知识?(栅栏函数、Group、定时器、信号量、队列类型、任务派发方式、快速迭代、延迟处理)
1.栅栏函数(控制任务的执行顺序)
dispatch_barrier_async(queue, ^{ NSLog(@"barrier"); });
2.延迟执行(延迟·控制在哪个线程执行)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSLog(@"---%@",[NSThread currentThread]); });
3.一次性代码
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"-----"); });
4.快速迭代(开多个线程并发完成迭代操作)
dispatch_apply(subpaths.count, queue, ^(size_t index) { });
5.队列组(同栅栏函数)
dispatch_group_t group = dispatch_group_create(); // 队列组中的任务执行完毕之后,执行该函数 dispatch_group_notify(dispatch_group_t group,dispatch_queue_t queue,dispatch_block_t block); // 进入群组和离开群组 dispatch_group_enter(group);//执行该函数后,后面异步执行的block会被gruop监听 dispatch_group_leave(group);//异步block中,所有的任务都执行完毕,最后离开群组 //注意:dispatch_group_enter|dispatch_group_leave必须成对使用
6.信号量(并发编程中很有用)
3.NSOperation
和 NSOperationQueue
相关知识?
(最大并发数、线程依赖)
4.如何实现线性编程?
信号量、栅栏、Dispatch_group
5.说一下 GCD
并发队列实现机制?
利用的时间片轮转
6.NSLock
NSLock
遵循NSLocking
协议,lock
方法是加锁,unlock
是解锁,tryLock
是尝试加锁,如果失败的话返回 NO,lockBeforeDate:
是在指定Date
之前尝试加锁,如果在指定时间之前都不能加锁,则返回NO
。
@protocol NSLocking - (void)lock; - (void)unlock; @end @interface NSLock : NSObject