RxJava Schedulers Use Case

In RxJava ci sono 5 diversi programmatori tra cui scegliere:

  1. immediate () : crea e restituisce uno Scheduler che esegue immediatamente il lavoro sul thread corrente.

  2. trampoline () : crea e restituisce un programma di pianificazione che le code funzionano sul thread corrente da eseguire dopo il completamento del lavoro corrente.

  3. newThread () : crea e restituisce uno Scheduler che crea un nuovo Thread per ogni unità di lavoro.

  4. computation () : crea e restituisce uno Scheduler destinato al lavoro computazionale. Questo può essere usato per loop di eventi, elaborazione di callback e altri lavori di calcolo. Non eseguire il lavoro legato a IO su questo programmatore. Utilizzare gli scheduler. io () invece.

  5. io () : crea e restituisce uno Scheduler destinato al lavoro con vincoli IO. L’implementazione è supportata da un pool di thread Executor che crescerà in base alle esigenze. Questo può essere usato per l’IO di blocco in modo asincrono. Non eseguire lavori computazionali su questo programmatore. Utilizzare gli scheduler. computation () invece.

Domande:

I primi 3 scheduler sono piuttosto auto-esplicativi; tuttavia, sono un po ‘confuso riguardo il calcolo e io .

  1. Che cosa è esattamente “lavoro vincolato all’IO”? È utilizzato per gestire flussi ( java.io ) e file ( java.nio.files )? Viene utilizzato per le query del database? Viene utilizzato per scaricare file o accedere alle API REST?
  2. In che modo computation () è diverso da newThread () ? È che tutte le chiamate computation () si trovano su un singolo thread (di sfondo) anziché un nuovo thread (di background) ogni volta?
  3. Perché è male chiamare computation () quando si esegue il lavoro di I / O?
  4. Perché è male chiamare io () quando si fa il lavoro di calcolo?