In RxJS, a scheduler is an object that provides a way to control the timing of when events are emitted by observables. Schedulers can be used to schedule tasks to be executed at a specific time, delay the execution of tasks, or specify on which thread the tasks should be executed. The purpose of using schedulers is to provide developers with more fine-grained control over the timing and execution of observables. One common scheduler in RxJS is the `observeOn()` operator. The `observeOn()` operator is used to specify the scheduler on which an observable should emit its values. Here's an example:

import { from } from 'rxjs';
import { observeOn } from 'rxjs/operators';
import { asyncScheduler } from 'rxjs';

const source$ = from([1, 2, 3]);

const async$ = source$.pipe(
  observeOn(asyncScheduler) // Emit values on the async scheduler

  value => console.log(value), // Output: 1, 2, 3
  err => console.error(err),
  () => console.log('Complete')

In this example, the `from()` function is used to create an observable that emits the values 1, 2, and 3. The `observeOn()` operator is then used to specify that the observable should emit its values on the async scheduler, which will cause the values to be emitted asynchronously. The `asyncScheduler` is a common scheduler in RxJS that schedules tasks to be executed asynchronously using `setTimeout()`. Schedulers can also be used to delay the execution of tasks, control the order in which tasks are executed, or specify on which thread the tasks should be executed. Some common schedulers in RxJS include `async`, `queue`, `animationFrame` and `immediate` among others.