# subscribeOn

**指定 `Observable` 在那个 `Scheduler` 执行**

![](https://4217506537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWj545abP2yK86-qksJ%2Fsync%2Ff4ed9209f247045221ad4435877edde4acdb48ce.png?generation=1616819395235635\&alt=media)

**ReactiveX** 使用 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 来让 `Observable` 支持多线程。你可以使用 **subscribeOn** 操作符，来指示 `Observable` 在哪个 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 执行。

[observeOn](https://3440217568.gitbook.io/rxswift/decision_tree/observeon) 操作符非常相似。它指示 `Observable` 在哪个 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 发出通知。

![](https://4217506537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWj545abP2yK86-qksJ%2Fsync%2Fc33348c29e9efb0fc123c5ece106749927d73379.png?generation=1616819389064819\&alt=media)

默认情况下，`Observable` 创建，应用操作符以及发出通知都会在 `Subscribe` 方法调用的 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 执行。**subscribeOn** 操作符将改变这种行为，它会指定一个不同的 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 来让 `Observable` 执行，[observeOn](https://3440217568.gitbook.io/rxswift/decision_tree/observeon) 操作符将指定一个不同的 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 来让 `Observable` 通知观察者。

如上图所示，**subscribeOn** 操作符指定 `Observable` 在那个 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 开始执行，无论它处于链的那个位置。 另一方面 [observeOn](https://3440217568.gitbook.io/rxswift/decision_tree/observeon) 将决定后面的方法在哪个 [Scheduler](https://3440217568.gitbook.io/rxswift/rxswift_core/schedulers) 运行。因此，你可能会多次调用 [observeOn](https://3440217568.gitbook.io/rxswift/decision_tree/observeon) 来决定某些操作符在哪个线程运行。
