面试回顾之二:多线程创建方式

1,pthread_create  

(unix自带的线程创建, 不多说,都知道, 比较少用)

2,nsthread

优点:NSThread 比其他两个轻量级。

缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销

两种方式创建:

- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument

[thread start]; //要手动去start开启线程

+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument //会自动开启线程

3,performSelectorInBackground:withObject: 来创建一个线程

[self performSelectorInBackground:@selector(run:) withObject:@"test"]; //在后台运行某一个方法

其效果与 NSThread 的 detachNewThreadSelector:toTarget:withObject: 是一样的。

4,nsoperation  (NSInvocationOperation 和 NSBlockOperation)

NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行,我们会把我们的执行操作放在NSOperation中main函数中。

nsoperation的子类要支持并发执行的话并,需要重载如下4个方法(默认不是并发的)

//执行任务主函数,线程运行的入口函数

-(void)start

//是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO

-(BOOL)isConcurrent

- (BOOL)isExecuting

//是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。

(BOOL)isFinished

5,GCD

dispatch queue分为下面三种:1,Serial

又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。

2,Concurrent

又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。

3,Main dispatch queue

它是全局可用的serial queue,它是在应用程序主线程上执行任务的。

面试回顾之二:多线程创建方式_第1张图片

你可能感兴趣的:(面试回顾之二:多线程创建方式)