一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
- 本文主要介绍下队列的调度情况,包括
并发队列和串行队列,发送和订阅的环境。
1. ConcurrentDispatchQueueScheduler
对于并发队列我们看下例子
DispatchQueue.global().async {
print("current:\(Thread.current)")
let ob = Observable<Int>.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)
ob
.observe(on: ConcurrentDispatchQueueScheduler.init(qos: .background))
// .subscribe(on: ConcurrentDispatchQueueScheduler(qos: .background) )
.subscribe(onNext: {print($0,Thread.current)})
.disposed(by: self.disposeBag)
}
复制代码
打印结果:
打印结果可以发现我们的队列是一个并发异步
队列,这里说明下为什么要发送100个元素,因为我们的序列首先是一个管子类似我们的队列遵循FIFO
的原则。所以如果很小的话基本上就是到91都是线程7.
observeOn
这里通过指定的调度器上运行其观察者回调
,当我们使用使用subscribeon
的时候表示在指定调度器上运行其订阅和取消订阅
类似我们GCD中并发队列同步函数和异步函数
的效果。
2. SerialDispatchQueueScheduler
observeOn
指定串行队列环境运行其观察者回调
subscribeon
指定串行队列环境运行其订阅和取消订阅
3. OperationQueueScheduler
observeOn
对OperationQueue
进行封装默认是并发
subscribeOn
4. MainScheduler
observeOn
subscribeOn
5. 总结
以上就是关于Rx Swift中队列的使用一共就是4种队列
,默认都是异步执行
,本身我们序列就是相当于一种队列的形式。对于我们没有指定观察者或者订阅者的调度环境的时候默认就是主线程异步函数
执行。