美文网首页
RAC并发编程笔记备份

RAC并发编程笔记备份

作者: 凯司机 | 来源:发表于2021-04-19 09:38 被阅读0次

整个RAC就是一个异步的库,他的值都是在未来的某个地方某个时间返回。

// 同步等待:函数调用,不返回结果不进行下一步、书写顺序==执行顺序、阻塞线程

// 异步不等待:函数调用,直接进行下一步、通过回调函数返回结果、书写顺序!=执行混序、非阻塞IO、RAC整个是个异步库

// 并发:在一个物理计算核心、通过调度手段兼顾多个任务、使任务看似一起执行

// 并行:在多个物理计算核心(多核)、通过分配手段处理多个任务、使任务一起执行

image.png image.png

RACSchedulerAPI注意事项:

// 主线程的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执行");
}];
// 执行结果

2021-04-16 17:54:57.391383+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:54:57.401024+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:54:58.158168+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:54:59.060772+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:54:59.060964+0800 NetSchool[4182:1244836] scheduler2执行

2021-04-16 17:55:00.155330+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:55:01.155704+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:55:02.155509+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:55:03.122474+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:55:04.157883+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:55:05.155716+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:55:06.105812+0800 NetSchool[4182:1244696] scheduler3执行

2021-04-16 17:55:07.072486+0800 NetSchool[4182:1244696] scheduler3执行

.

.

.

// RACScheduler vs GCD

// Scheduler使用GCD来实现

// 可以"取消"——这里的取消知识block不执行了,但任务依然执行。

// 与RAC其他组件高度整合

// 一个Scheduler保证串行执行

// 一个Scheduler的任务不保证线程是同一个。

相关文章

网友评论

      本文标题:RAC并发编程笔记备份

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