美文网首页iOS面试系列
面试回顾之二:多线程创建方式

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

作者: 西门魏国 | 来源:发表于2015-03-16 15:21 被阅读404次

    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,它是在应用程序主线程上执行任务的。

    相关文章

      网友评论

        本文标题:面试回顾之二:多线程创建方式

        本文链接:https://www.haomeiwen.com/subject/vwsixttx.html