美文网首页
Schedulers - 调度器

Schedulers - 调度器

作者: Satelens | 来源:发表于2018-12-20 21:47 被阅读14次
image.png

Schedulers 是 Rx 实现多线程的核心模块,它主要用于控制任务在哪个线程或队列运行。

例如GCD用法:

// 后台取得数据,主线程处理结果
DispatchQueue.global(qos: .userInitiated).async {
    let data = try? Data(contentsOf: url)
    DispatchQueue.main.async {
        self.data = data
    }
}

如果用 RxSwift 来实现,大致是这样的:

let rxData: Observable<Data> = ...

rxData
    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
    .observeOn(MainScheduler.instance)
    .subscribe(onNext: { [weak self] data in
        self?.data = data
    })
    .disposed(by: disposeBag)

subscribeOn

我们用 subscribeOn 来决定数据序列的构建函数在哪个 Scheduler 上运行。以上例子中,由于获取 Data 需要花很长的时间,所以用 subscribeOn 切换到 后台 Scheduler 来获取 Data。这样可以避免主线程被阻塞。

observeOn

我们用 observeOn 来决定在哪个 Scheduler 监听这个数据序列。以上例子中,通过使用 observeOn 方法切换到主线程来监听并且处理结果。

一个比较典型的例子就是,在后台发起网络请求,然后解析数据,最后在主线程刷新页面。你就可以先用 subscribeOn 切到后台去发送请求并解析数据,最后用 observeOn 切换到主线程更新页面。

MainScheduler

MainScheduler 代表主线程。如果你需要执行一些和 UI 相关的任务,就需要切换到该 Scheduler 运行。

SerialDispatchQueueScheduler

SerialDispatchQueueScheduler 抽象了串行 DispatchQueue。如果你需要执行一些串行任务,可以切换到这个 Scheduler 运行。

ConcurrentDispatchQueueScheduler

ConcurrentDispatchQueueScheduler 抽象了并行 DispatchQueue。如果你需要执行一些并发任务,可以切换到这个 Scheduler 运行。

OperationQueueScheduler

OperationQueueScheduler 抽象了 NSOperationQueue。

它具备 NSOperationQueue 的一些特点,例如,你可以通过设置 maxConcurrentOperationCount,来控制同时执行并发任务的最大数量。

相关文章

  • Swift - RxSwift的使用详解20(调度器、subsc

    二十、调度器(Schedulers) 1,基本介绍 (1)调度器(Schedulers)是 RxSwift 实现多...

  • 调度器、subscribeOn、observeOn

    调度器(Schedulers) (1)调度器(Schedulers)是 RxSwift 实现多线程的核心模块,它主...

  • RxJava第三篇,调度器Scheduler

    RxJava中Schedulers(调度器):Rxjava解决多线程问题的机制 种类: Schedulers.io...

  • Schedulers - 调度器

    Schedulers 是 Rx 实现多线程的核心模块,它主要用于控制任务在哪个线程或队列运行。 例如GCD用法: ...

  • Rx家族

    RxJava 学习记 (三) — 1.x 线程调度器 Schedulers SchedulersioSchedul...

  • RxJS Schedulers 调度器

    Rxjs调度器 本文采用 RxjsV5.5 版本,这个版本和先前版本最大不同之处是import方式,以及引入了 p...

  • RxSwift文档五(Schedulers)

    代码下载 Schedulers 串行与并发调度程序 自定义调度程序 内置调度程序 Schedulers抽象出执行工...

  • RxJava Schedulers 调度器.md

    Schedulers.immediate() Schedulers.newThread() 总是启用新线程,并在新...

  • RxJava响应式编程

    常用名词说明 Schedulers(调度器) 解决Android主线程问题; 解决多线程线程问题 Observab...

  • RxJava

    一、Schedulers(调度器)1.解决Android主线程问题【针对Android】2.解决多线程线程问题 二...

网友评论

      本文标题:Schedulers - 调度器

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