多线程相关

42 篇文章 0 订阅
18 篇文章 0 订阅

程序: 可执行文件

进程: 一个正在运行的可执行文件, 每个进程都有独立的虚拟内存空间和系统资源, 包含至少一个主线程和任意数量的辅助线程, 而且, 当一个进程的主线程退出时, 这个进程就结束了

线程: 一个独立代码执行路径, 由线程做资源的分配和调度


iOS创建线程的方式:

----------------------------------------------------------------------------------------------------------------------------------------------------------


a. NSObject 

//调用此方法, 执行的操作(方法)在后台进程中执行 

[self performSelectorInBackground:@selector(serverPro:) withObject:@"你好"];

----------------------------------------------------------------------------------------------------------------------------------------------------------

b. NSThread

NSThread, 线程类, 继承与NSObject

//开辟一个子线程

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(serverPro:) object:nil];


//常用的一些方法


//获取主线程

NSThread *mainThread = [NSThread mainThread];

//获取当前代码执行的线程

NSThread *currentThread = [NSThread currentThread];

//线程休眠

[NSThread sleepForTimeInterval:5];


//主线程和子线程的区别

    //1. 能够分配的资源的最大容量不同, 主线程10MB, 子线程5MB

    //2. 子线程不会释放autorelease的对象, 需要手动添加自动释放池

    //3. 更新UI的操作必须在主线程中执行

-------------------------------------------------------------------------------------



c. NSOperationQueue


NSOperationQueue, 操作队列, 继承于NSObject, 操作队列绑定一个线程


队列结构: 先进先出



//NSOperation, 任务(操作), 继承于NSObject, 是抽象基类, 其子类: NSInvocationOperation or NSBlockOperation

    //子类:

        //NSInvocationOperation

        //NSBlockOperation

    

    //串行, 并发, 主要的区别在于同时执行的任务的数量

    //串行: 一次只能执行一个任务, 并且必须等上一个任务执行完, 才能执行下一个任务

    //并发: 允许多个任务同时执行


 //创建任务


    //任务只能够执行一次, 已经添加到对列中, 就不能再添加

//任务1

    NSInvocationOperation *invocation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(serverPro:) object:nil];

    //任务2

    NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock:^{

        for (NSInteger i = 1; i <= 100; i++) {

            NSLog(@"%ld", i);

        }

    }];


 //创建操作队列

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

//把任务放到队列中

[queue addOperation:invocation];

[queue addOperation:block];


-------------------------------------------------------------------------------------

d. GCD


GCD: Grand Central Dispatch, 大中央调度, 基于CPU的多核技术实现, 使用C语言的语法, 执行效率更高, NSOperationQueue就是基于GCD实现的


三种队列:


1> 主队列, 绑定主线程, 串行队列

dispatch_queue_t mainQueue = dispatch_get_main_queue();


2> 全局队列, 绑定的是子线程, 串行或并发

//参数1: 队列优先级

//参数2: 预留参数, 为未来做准备


 dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);


3> 自定义队列, 绑定子线程, 串行或并发

//参数1: 队列标识符, 域名

//参数2: 并发或串行


dispatch_queue_t custom = dispatch_queue_create("com.lanou3g.huihui", DISPATCH_QUEUE_CONCURRENT);


把操作放在队列的两种方式:


//同步执行

dispatch_sync(mainQueue, ^{

        //写操作

        [self serverPro:nil];

    });


//异步执行

 dispatch_async(globalQueue, ^{

        [self serverPro:nil];

    });


//多少秒后执行

    //第一个参数: 秒数

    //第二个参数: 多少秒后的操作

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        NSLog(@"睡觉");

    });





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值