美文网首页
RAC的Scheduler

RAC的Scheduler

作者: 凯司机 | 来源:发表于2021-05-17 09:49 被阅读0次

    RAC的Scheduler:

    // RAC并发编程
    // 同步等待:函数调用,不返回结果不进行下一步、书写顺序==执行顺序、阻塞线程
    // 异步不等待:函数调用,直接进行下一步、通过回调函数返回结果、书写顺序!=执行混序、非阻塞IO、RAC整个是个异步库
    // 并发:在一个物理计算核心、通过调度手段兼顾多个任务、使任务看似一起执行
    // 并行:在多个物理计算核心(多核)、通过分配手段处理多个任务、使任务一起执行
    
    // 主线程的Scheduler
    RACScheduler *mainScheduler = [RACScheduler mainThreadScheduler];
    
    // 子线程的两个Scheduler,注意[RACScheduler scheduler]是返回一个新的
    RACScheduler *scheduler1 = [RACScheduler scheduler];
    RACScheduler *scheduler2 = [RACScheduler scheduler];
    
    // 返回当前的Scheduler,自定义线程会(比如使用GCD等自定义线程)返回nil
    RACScheduler *scheduler3 = [RACScheduler currentScheduler];
    
    // 创建优先级Scheduler,不建议除非你知道你在干什么
    RACScheduler *scheduler4 = [RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh];
    RACScheduler *scheduler5 = [RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh name:@"RACSchedulerPriorityHigh"];
    
    // 创建立即Scheduler,不建议除非你知道你在干什么
    RACScheduler *scheduler6 = [RACScheduler immediateScheduler];
    
    RACDisposable *disposeable = [mainScheduler schedule:^{
        NSLog(@"执行:mainScheduler");
    }];
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *date = [formatter dateFromString:@"2021-04-16 17:55:24"];
    
    // 指定时间执行
    [scheduler1 after:date schedule:^{
        NSLog(@"scheduler1执行");
    }];
    
    // 指定延迟多久执行
    [scheduler2 afterDelay:3 schedule:^{
        NSLog(@"scheduler2执行");
    }];
    
    // 从现在开始,每1秒执行一次,最长不能操作1.1秒执行。
    [scheduler3 after:[NSDate date] repeatingEvery:1 withLeeway:.1 schedule:^{
        NSLog(@"scheduler3执行");
    }];
    
    // RACScheduler vs GCD
    // Scheduler使用GCD来实现
    // 可以"取消"——这里的取消知识block不执行了,但任务依然执行。
    // 与RAC其他组件高度整合
    // 一个Scheduler保证串行执行
    // 一个Scheduler的任务不保证线程是同一个。
    

    相关文章

      网友评论

          本文标题:RAC的Scheduler

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