美文网首页
NSThread、NSOperation

NSThread、NSOperation

作者: 6灰太狼9 | 来源:发表于2017-11-24 15:06 被阅读5次

    首先我们先搞清两个概念:进程线程
    进程:进程是指在系统中正在运行的一个应用程序(同时开启qq和xcode,系统就会启动两个进程)。每个进程之间都是互相独立的,每个进程均运行在其专用的且受保护的内存空间内。

    线程:一个进程要想执行任务,必须有线程(每个进程至少有一条线程,即主线程)。线程是进程的基本执行单位,进程的执行任务都在线程中执行。 线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

    线程中任务的执行是串行的,如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务。也就是说,在同一时间内,1个线程只能执行1个任务。

    而我们在使用中不可能让多个任务在一个线程中依次去执行,因而就引入了多线程。
    多线程:在一个进程中开启多个线程,每条线程可以并发(同时)执行不同的任务。
    多线程的原理:同一时间,CPU只能处理一条线程,只有一条线程在工作(执行)。多线程并发(同时)执行,其实是CPU快速的在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象

    多线程优点:
    (1)能适当提高程序的执行效率
    (2)能适当提高资源利用率(CPU,内存利用率)
    多线程缺点:
    (1)开启线程需哟啊占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
    (2)线程越多,CPU在调度线程上的开销就越大
    (3)程序设计更加复杂:比如线程之间的通信,多线程的数据共享

    NSThread

    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
    [thread start];   //创建线程 在启动
    [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];//创建线程后直接启动
    [self performSelectorInBackground:@selector(run) withObject:nil];//隐式创建了线程  并启动
    
    线程的主要方法
    // 获得主线程
    + (NSThread *)mainThread;    
    
    // 判断是否为主线程(对象方法)
    - (BOOL)isMainThread;
    
    // 判断是否为主线程(类方法)
    + (BOOL)isMainThread;    
    
    // 获得当前线程
    NSThread *current = [NSThread currentThread];
    
    // 线程的名字——setter方法
    - (void)setName:(NSString *)n;    
    
    // 线程的名字——getter方法
    - (NSString *)name;
    
    //线程启动  
    - (void)start;
    
    //阻塞线程   这是类方法,在那个线程中调用,就阻塞那个线程
    + (void)sleepUntilDate:(NSDate *)date;
    + (void)sleepForTimeInterval:(NSTimeInterval)ti;
    
    //结束线程   这是类方法,在那个线程中调用,就结束那个线程
    + (void)exit;
    

    NSOperation

    https://www.jianshu.com/p/4b1d77054b35

    相关文章

      网友评论

          本文标题:NSThread、NSOperation

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