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的任务不保证线程是同一个。
网友评论